1、添加配置文件内容
(1)把上传固定值放到配置文件中(注意:阿里云oss服务的配置需要填写自己的相关内容)
#服务端口
server.port=8002
#服务名
spring.application.name=service-eduoss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=此处须填写自己的阿里云OSS服务的endpoint
aliyun.oss.file.keyid= 此处须填写自己的阿里云OSS服务的keyid
aliyun.oss.file.keysecret= 此处须填写自己的阿里云OSS服务的keysecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname= 此处须填写自己的阿里云OSS服务的bucketname
(2)在utils目录下创建类,读取配置文件
@Component
public class ConstantPropertiesUtil implements InitializingBean {
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
public static String END_POINT;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT=endpoint;
ACCESS_KEY_ID=keyId;
ACCESS_KEY_SECRET=keySecret;
BUCKET_NAME=bucketName;
}
}
(3)使用配置信息
package com.atguigu.oosservice.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.atguigu.oosservice.service.FileService;
import com.atguigu.oosservice.utils.ConstantPropertiesUtil;
import com.atguigu.servicebase.handler.GuliException;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Service
public class FileServiceImpl implements FileService {
//上传文件阿里云OSS
@Override
public String uploadFileOss(MultipartFile file) {
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = ConstantPropertiesUtil.END_POINT;
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
//上传文件流
InputStream inputStream = file.getInputStream();
String fileName = file.getOriginalFilename();
//uuid
String uuid = UUID.randomUUID().toString();
//11223334401.jpg
fileName = uuid+fileName;
//定义文件目录
//目录/2020/06/22/01.jpg
String path = new DateTime().toString("yyyy/MM/dd");//2020/06/22
fileName = path+"/"+fileName;
ossClient.putObject(bucketName, fileName, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//拼接url
//https://guli-file200211test.oss-cn-beijing.aliyuncs.com/01.jpg
String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
return url;
} catch (IOException e) {
throw new GuliException(20001,"上传失败");
}
}
}
2、使用UUID实现文件名不重复
String fileName = file.getOriginalFilename();
//uuid
String uuid = UUID.randomUUID().toString();
//11223334401.jpg
fileName = uuid+fileName;
3、把文件分类管理,根据日期存储文件
//定义文件目录
//目录/2020/06/22/01.jpg
String path = new DateTime().toString("yyyy/MM/dd");//2020/06/22
fileName = path+"/"+fileName;