1.图片存储
图片存储是指将图片文件保存在服务器或云存储中的技术或服务。图片存储的主要目的是方便用户上传、存储、管理和分享图片文件。
图片存储可以分为两种主要类型:本地存储和云存储。
本地存储是将图片文件保存在本地服务器或计算机上的一种方式。这种存储方式通常需要自己配置服务器和存储设备,并负责维护和管理图片文件。本地存储的优点是可以直接掌控图片文件,可自定义存储规则和和访问权限。但它也具有一些缺点,例如需要投入更多的成本和精力,以及可能存在数据安全和可靠性的风险。
云存储是将图片文件保存在云服务器或云存储服务提供商的服务器上的一种方式。这种存储方式可以免去自己配置服务器和存储设备的麻烦,并提供了便捷的上传、存储、管理和分享图片的功能。云存储的优点是具有高可用性和可靠性,用户可以根据需要灵活扩展存储空间,同时还可以享受云服务提供商提供的其他功能和服务。但云存储也存在一些缺点,如对数据的掌控程度较低,可能存在数据安全和隐私问题。
图片存储的选择应根据实际需求和预算来决定。如果对数据控制要求比较高,有足够的资源和技术支持,那么选择本地存储可能更合适。如果希望省去服务器维护和管理的麻烦,注重可用性和扩展性,那么选择云存储可能更合适。
对象存储oss
阿里云的对象存储服务(Object Storage Service,简称OSS)是一种海量、安全、低成本、高可靠的云存储服务。它可以用来存储和管理大量的非结构化数据,如图片、音视频、文档等。阿里云OSS提供了丰富的功能和API,可以实现数据的上传、下载、删除、复制等操作,还支持图片处理、音视频转码等功能,方便用户在云端进行数据的处理和管理。阿里云OSS具有高可靠性和可扩展性,可以根据用户的需求自动扩缩容,同时提供多种数据备份和数据安全措施,保证数据的安全和可靠性。通过阿里云OSS,用户可以轻松地构建起自己的云存储平台,满足各种业务场景下的存储需求。
2.使用步骤
2.1根据步骤申请
创建key完成后需要配置参数
2.2配置AK & SK
以管理员身份打开CMD命令行,执行如下命令,配置系统的环境变量。
set OSS_ACCESS_KEY_ID=LTAI5tXXXXXXXXXXXXXXXXXXXXM8TP set OSS_ACCESS_KEY_SECRET=UzMcJXXXXXXXXXXXXXXXXXXXXdabTNafi
1.1.3查看SDK文档
配置maven
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
上传文件流
以下代码用于将文件流上传到目标存储空间examplebucket中exampledir目录下的exampleobject.txt文件。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.FileInputStream;
import java.io.InputStream;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "exampledir/exampleobject.txt";
// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
String filePath= "D:\\localpath\\examplefile.txt";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
InputStream inputStream = new FileInputStream(filePath);
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
// 创建PutObject请求。
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
在以上代码中,需要替换的内容为:
endpoint:阿里云OSS中的bucket对应的域名
bucketName:Bucket名称
objectName:对象名称,在Bucket中存储的对象的名称
filePath:文件路径
运行以上程序后,会把本地的文件上传到阿里云OSS服务器上。