import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.util.UUID;
/**
* <h1>文件上传业务实现Demo</h1>
* <hr/>
* <p> 详细参考阿里云OSS文档 </p>
*
* @author mulun
* @version 1.0
*/
@Service
public class FileServiceImpl implements FileService {
/**
* <h2>文件上传至阿里云</h2>
* <hr/>
*
* @param inputStream 填写本地文件的完整路径。
* @param module 存放的模块
* @param fileName 文件名
* @return 阿里云文件绝对路径
*/
@Override
public String upload(InputStream inputStream, String module, String fileName) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(
OssProperties.ENDPOINT,
OssProperties.KEY_ID,
OssProperties.KEY_SECRET);
// 如果BUCKET_NAME不存在,就创建.
if (!ossClient.doesBucketExist(OssProperties.BUCKET_NAME)) {
// 创建一个存储空间
ossClient.createBucket(OssProperties.BUCKET_NAME);
// 设置该存储空间的访问权限
ossClient.setBucketAcl(OssProperties.BUCKET_NAME,
CannedAccessControlList.PublicRead);
}
// 构建日期路径,基于时间日期的文件夹路径
String timeFolder = new DateTime().toString("/yyyy/MM/dd/");
// 文件名生成:uuid.扩展名
fileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
// 文件目录结构 "avatar/2021/01/01/uuid.jpg"
String key = module + timeFolder + fileName;
// 文件上传至阿里云
ossClient.putObject(OssProperties.BUCKET_NAME, key, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
// 返回阿里云文件绝对路径
return "https://" + OssProperties.BUCKET_NAME + "." + OssProperties.ENDPOINT + "/" + key;
}
/**
* 根据路径删除文件
*
* @param url
*/
@Override
public void removeFile(String url) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(
OssProperties.ENDPOINT,
OssProperties.KEY_ID,
OssProperties.KEY_SECRET);
//文件名(服务器上的文件路径)
String host = "https://" + OssProperties.BUCKET_NAME + "." + OssProperties.ENDPOINT + "/";
String objectName = url.substring(host.length());
// 删除文件。
ossClient.deleteObject(OssProperties.BUCKET_NAME, objectName);
// 关闭OSSClient。
ossClient.shutdown();
}
}
application.yaml:
aliyun:
oss:
endpoint: endpoint
keyId: keyId
keySecret: keySecret
bucketName: bucketName