package com.ruoyi.file.service;
|
|
|
import com.aliyun.oss.ClientBuilderConfiguration;
|
import com.aliyun.oss.OSS;
|
import com.aliyun.oss.OSSClientBuilder;
|
import com.aliyun.oss.common.auth.CredentialsProvider;
|
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
|
import com.aliyun.oss.common.comm.SignVersion;
|
import com.aliyun.oss.model.PutObjectRequest;
|
import com.aliyun.oss.model.PutObjectResult;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.file.config.OssConfig;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.util.Date;
|
import java.util.Objects;
|
import java.util.UUID;
|
|
/**
|
* @author mitao
|
* @date 2024/12/23
|
*/
|
@Service
|
public class OssServiceImpl implements OssService {
|
/**
|
* 文件上传
|
*
|
* @param file
|
* @return
|
*/
|
@Override
|
public String uploadFile(MultipartFile file) throws IOException {
|
return upload(OssConfig.FOLDER, file);
|
}
|
|
/**
|
* 文件上传,指定上传路径
|
*
|
* @param storagePath
|
* @param file
|
* @return
|
*/
|
@Override
|
public String upload(String storagePath, MultipartFile file) throws IOException {
|
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(OssConfig.ACCESS_KEY_ID, OssConfig.ACCESS_KEY_SECRET);
|
String region = "cn-chengdu";
|
// 创建OSSClient实例。
|
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
|
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
|
OSS ossClient = OSSClientBuilder.create()
|
.endpoint(OssConfig.UPLOAD_ENDPOINT)
|
.credentialsProvider(credentialsProvider)
|
.clientConfiguration(clientBuilderConfiguration)
|
.region(region)
|
.build();
|
InputStream inputStream = file.getInputStream();
|
|
String originFileName = file.getOriginalFilename();
|
String fileExt = Objects.requireNonNull(originFileName).substring(originFileName.lastIndexOf(".") + 1);
|
String fileName = originFileName.substring(0, originFileName.lastIndexOf("."));
|
// 设置文件名
|
String filePathName = generateRelativeStoragePath(storagePath, fileExt, fileName);
|
// 创建PutObjectRequest对象。
|
PutObjectRequest putObjectRequest = new PutObjectRequest(OssConfig.BUCKET_NAME, filePathName, inputStream);
|
// 创建PutObject请求。
|
PutObjectResult result = ossClient.putObject(putObjectRequest);
|
|
return OssConfig.DOWNLOAD_ENDPOINT + filePathName;
|
}
|
|
/**
|
* <pre>
|
* 获取存储的相对路径
|
* 规则path + / + yyyyMMddHH + uuid
|
* </pre>
|
*
|
* @param storagePath
|
* @return
|
*/
|
private static String generateRelativeStoragePath(String storagePath, String fileType, String fileName) {
|
|
String time = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");
|
String uuid = UUID.randomUUID().toString();
|
StringBuilder sb = new StringBuilder();
|
if (StringUtils.isNotBlank(storagePath)) {
|
sb.append(storagePath).append("/");
|
}
|
if (fileName == null) {
|
sb.append(time).append(uuid);
|
} else {
|
sb.append(fileName).append(time);
|
}
|
if (StringUtils.isNotBlank(fileType)) {
|
sb.append(".").append(fileType);
|
}
|
return sb.toString();
|
}
|
}
|