@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFileAvatar(MultipartFile file) {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = ConstantYamlUtils.END_POINT;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = ConstantYamlUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantYamlUtils.ACCESS_KEY_SECRET;
// 填写Bucket名称,例如examplebucket。
String bucketName = ConstantYamlUtils.BUCKET_NAME;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//获取上传文件流的输入流
InputStream inputStream = file.getInputStream();
/*
下面对文件名做一系列处理,防止冲突
*/
//获取要上传的文件名称
String filename = file.getOriginalFilename();
//1.让每个文件名称不冲突:加UUID
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
filename=uuid+filename;
//2.加上日期当做文件夹"2023/6/9/tzm.jpg"
String datePath = new DateTime().toString("yyy/MM/dd");
filename=datePath+"/"+filename;
//此时:2023/6/9/UUID-tzm.jpg
//调用oss上传文件的方法
//参数二:上传到oss文件路径和文件的名称,比如/aa/bb/tzm.jpg,此时会上传到指定文件夹下,没有文件夹会自动创建
ossClient.putObject(bucketName,filename, inputStream);
//关闭ossClient
ossClient.shutdown();
//需要返回url路径
//把上传到阿里云oss路径手动拼接返回(因为没有专门获取路径的方法)
//https://tzm233.oss-cn-beijing.aliyuncs.com/tzm.jpg
String url= "https://"+bucketName+"."+endpoint+"/"+filename;
return url;
} catch (IOException e) {
e.printStackTrace();
return "oss出错";
}
}
}