fix: 文件删除根据文件路径获取文件名考虑自定义域名的情况

This commit is contained in:
haoxr
2023-06-04 08:26:18 +08:00
parent 78f8d737fb
commit 832d36ff7a
3 changed files with 33 additions and 33 deletions

View File

@@ -8,7 +8,6 @@ import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.youlai.system.model.dto.FileInfo;
import com.youlai.system.service.OssService;
import jakarta.annotation.PostConstruct;
@@ -69,33 +68,30 @@ public class AliyunOssService implements OssService {
String fileName = DateUtil.format(LocalDateTime.now(), "yyyy/MM/dd") + "/" + uuid + "." + suffix;
// try-with-resource 语法糖自动释放流
try (InputStream inputStream = file.getInputStream()) {
// 创建PutObjectRequest对象指定Bucket名称、对象名称和输入流
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, inputStream);
// 设置上传文件的元信息例如Content-Type
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(file.getContentType());
putObjectRequest.setMetadata(metadata);
// 创建PutObjectRequest对象指定Bucket名称、对象名称和输入流
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, inputStream, metadata);
// 上传文件
PutObjectResult putObjectResult = aliyunOssClient.putObject(putObjectRequest);
// 获取文件访问路径
String fileUrl = "https://" + bucketName + ".oss-cn-hangzhou.aliyuncs.com/" + fileName;
FileInfo fileInfo = new FileInfo();
fileInfo.setName(fileName);
fileInfo.setUrl(fileUrl);
return fileInfo;
aliyunOssClient.putObject(putObjectRequest);
} catch (Exception e) {
throw new RuntimeException("文件上传失败");
}
// 获取文件访问路径
String fileUrl = "https://" + bucketName + "." + endpoint + "/" + fileName;
FileInfo fileInfo = new FileInfo();
fileInfo.setName(fileName);
fileInfo.setUrl(fileUrl);
return fileInfo;
}
@Override
public boolean deleteFile(String filePath) {
Assert.notBlank(filePath, "删除文件路径不能为空");
String tempStr = "/" + bucketName + "/";
String fileName = filePath.substring(filePath.indexOf(tempStr) + tempStr.length()); // 2022/11/20/test.jpg
String fileHost = "https://" + bucketName + "." + endpoint; // 文件主机域名
String fileName = filePath.substring(fileHost.length() + 1); // +1 是/占一个字符,截断左闭右开
aliyunOssClient.deleteObject(bucketName, fileName);
return true;
}

View File

@@ -37,7 +37,7 @@ import java.time.LocalDateTime;
public class MinioOssService implements OssService {
/**
* 服务Endpoint
* 服务Endpoint(http://localhost:9000)
*/
private String endpoint;
/**
@@ -53,7 +53,7 @@ public class MinioOssService implements OssService {
*/
private String bucketName;
/**
* 自定义域名
* 自定义域名(https://oss.youlai.tech)
*/
private String customDomain;
@@ -81,7 +81,7 @@ public class MinioOssService implements OssService {
// 生成文件名(日期文件夹)
String suffix = FileUtil.getSuffix(file.getOriginalFilename());
String uuid = IdUtil.simpleUUID();
String fileName = DateUtil.format(LocalDateTime.now(), "yyyy/MM/dd") + "/" + uuid + "." + suffix;
String fileName = DateUtil.format(LocalDateTime.now(), "yyyyMMdd") + "/" + uuid + "." + suffix;
// try-with-resource 语法糖自动释放流
try (InputStream inputStream = file.getInputStream()) {
// 文件上传
@@ -121,27 +121,33 @@ public class MinioOssService implements OssService {
* 删除文件
*
* @param filePath 文件路径
* https://oss.youlai.tech/default/2022/11/20/test.jpg
* https://oss.youlai.tech/default/20221120/test.jpg
* @return
*/
@Override
public boolean deleteFile(String filePath) {
Assert.notBlank(filePath, "删除文件路径不能为空");
String tempStr = "/" + bucketName + "/";
String fileName = filePath.substring(filePath.indexOf(tempStr) + tempStr.length()); // 2022/11/20/test.jpg
RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.build();
try {
String fileName;
if (StrUtil.isNotBlank(customDomain)) {
// https://oss.youlai.tech/default/20221120/test.jpg → 20221120/test.jpg
fileName = filePath.substring(customDomain.length() + 1 + bucketName.length() + 1); // 两个/占了2个字符长度
} else {
// http://localhost:9000/default/20221120/test.jpg → 20221120/test.jpg
fileName = filePath.substring(endpoint.length() + 1 + bucketName.length() + 1);
}
RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.build();
minioClient.removeObject(removeObjectArgs);
return true;
} catch (ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException |
InvalidResponseException | IOException | NoSuchAlgorithmException | ServerException |
XmlParserException e) {
throw new RuntimeException(e);
}
return true;
}