OSS是一种分布式文件存储的一个不错选择,对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。
申请阿里OSS,创建Bucket
oss是收费的,每个bucket是一个存储空间,可以根据不同的项目创建不同的Bucket。
入门示例
1、引入pom依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.8.0</version>
</dependency>
2、代码测试
public class FileUpload {
// 上传文件流的方式 - 常用
public static void main(String[] args) throws FileNotFoundException {
// Endpoint以成都为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-chengdu.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维
String accessKeyId = "Xxxxxx";
String accessKeySecret = "Aaaaaaaa";
// 创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流 - 文件地址
InputStream inputStream = new FileInputStream("f:\\成果.jpg");
// 存储BucketName、上传到OSS的文件名
ossClient.putObject("liuchengyin", "狗哥.jpg", inputStream);
// 关闭OSSClient
ossClient.shutdown();
}
}
使用Spring管理OSSClient
1、在Spring配置文件中添加如下
<!--阿里云OSS -->
<bean id="ossClient" class="com.aliyun.oss.OSSClient">
<!-- Endpoint以成都为例,其它Region请按实际情况填写 -->
<constructor-arg index="0" value="oss-cn-chengdu.aliyuncs.com"></constructor-arg>
<!-- AccessKeyID -->
<constructor-arg index="1" value="AccessKeyID"></constructor-arg>
<!-- AccessKeySecret -->
<constructor-arg index="2" value="AccessKeySecret"></constructor-arg>
</bean>
2、上传后端代码示例
@Controller
public class uploadController{
// 注入OSSClient
@Autowired
private OSSClient ossClient;
/**
* 上传图片
* @param file 文件
* @param folder 文件所在文件夹名
*/
@PostMapping("/upload")
public String ossUpload(@RequestParam("file") MultipartFile file,String folder){
// BucketName
String bucketName = "liuchengyin";
// 获取原始的文件名
String fileName = file.getOriginalFilename();
// 使用UUID来处理文件名随机
fileName = folder + "/" + UUID.randomUUID() + file.getOriginalFilename();
try{
ossClient.putObject(bucketName,fileName,file.getInputStream());
}.cathc(Exception e){
e.printStackTrace();
}
// 返回图片地址
return "https://" + bucketName + ".oss-cn-chengdu.aliyuncs.com/" + fileName;
}
}
扫描二维码关注公众号,回复:
10390290 查看本文章