**
1.场景:调用客户端删除api无法删除文件 打印后发现传参无误
**
@Override
public boolean deleteFile(String bucketName, String fileName) {
try {
System.out.println("正在删除文件:" + fileName+"..."+bucketName);
client.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());
System.out.println("完成删除:" + fileName+"..."+bucketName);
} catch (Exception e) {
return false;
}
return true;
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean removeFile(List<String> fileIds) {
if (CollectionUtils.isEmpty(fileIds)) {
return true;
}
List<FileDTO> fileList = sysFileMapper.selectBatchIds(fileIds);
if (CollectionUtils.isEmpty(fileList)) {
return true;
}
int updated = sysFileMapper.removeRealFileBatch(fileIds);
if (updated != fileIds.size()) {
throw new RuntimeException("数据库删除数量不一致,预期:" + fileIds.size() + ",实际:" + updated);
}
for (FileDTO file : fileList) {
String url = file.getFileUrl(); // 假设你数据库中保存的是完整 URL
String fileName = extractRelativePathFromUrl(url);
System.out.println("正在删除文件:" + fileName);
if (StringUtils.isNotBlank(fileName)) {
System.out.println("正在删除文件:" + fileName);
R<Boolean> result = remoteFileService.delete("pmd", fileName);
if (!R.isSuccess(result) || Boolean.FALSE.equals(result.getData())) {
throw new RuntimeException("远程删除失败:" + fileName);
}
}
}
return true;
}
**
2.解决方案:fileName 不能包含桶名字和/ 也就是空白开头包含层级路径,文件后缀结尾
**
正在删除文件:2025/07/08/logo71x40_20250708095042A002.png
删除文件: 2025/07/08/logo71x40_20250708095042A002.png
成功bucketName:xxx 就解决了