接口 OssService:
package com.wzy.oss.service;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@Service
public interface OssService {
String uploadFileAvatar(MultipartFile file);
}
实现类 OssServiceImpl:
package com.wzy.oss.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.wzy.oss.service.OssService;
import com.wzy.oss.utils.ConstanPropertiesUtils;
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 OssServiceImpl implements OssService {
/*
* @description 以下是长传头像的代码,根据 https://help.aliyun.com/document_detail/84781.html 中
* <简单上传>中的<上传文件流>。
* @author WangZiyao
* @date 2021/9/20 0020 15:42
* @param [org.springframework.web.multipart.support.MultipartFilter]
* @return java.lang.String
*/
@Override
public String uploadFileAvatar(MultipartFile file) {
//1、通过工具类 ConstanPropertiesUtils 获取对应的属性的值。
String endpoint = ConstanPropertiesUtils.END_POINT;
String accessKeyId = ConstanPropertiesUtils.KEY_ID;
String accessKeySecret = ConstanPropertiesUtils.KEY_SECRET;
String bucketName = ConstanPropertiesUtils.BUCKET_NAME;
try {
// 2、创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//获取文件输入流
InputStream inputStream = file.getInputStream();
//与 <文件名 fileName> 拼接,构成唯一值,使上传的文件名不会因重复,从而被覆盖。
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//获取上传文件的名称,与 uuid 拼接构成唯一名称。
String fileName = uuid + file.getOriginalFilename();
//把文件按照日期进行分类
//使用pom中的 joda-time 时间依赖,
//获取时间,并转换为 2021/09/20 的格式
String dataPath = new DateTime().toString("yyyy/MM/dd");
//2021/09/20/822d4669bf51484c9e5b664ce550c8da刘亦菲.jpg
fileName = dataPath + "/" + fileName;
// 1、依次填写 Bucket名称(例如examplebucket):bucketName
// 和Object完整路径或文件名称(例如exampledir/exampleobject.txt)。:filename
// Object完整路径中不能包含Bucket名称。
ossClient.putObject(bucketName, fileName, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//返回图片路径
//https://myedu1010.oss-cn-hangzhou.aliyuncs.com/射手.jpg
String pictureUrl = "https://" + bucketName + "." + endpoint + "." + "/" + fileName;
return pictureUrl;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}