Minio调用客户端无法删除文件bug

发布于:2025-07-11 ⋅ 阅读:(19) ⋅ 点赞:(0)

**

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 就解决了


网站公告

今日签到

点亮在社区的每一天
去签到