1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| private static final String DELETED_PATH_PREFIX = "deleted/";
@Override public boolean moveFileToDeleted(String fileUrl) { if (!StringUtils.hasText(fileUrl)) { log.warn("文件URL为空,无法移动到deleted文件夹"); return false; }
try { String sourceKey = extractKeyFromUrl(fileUrl);
if (!StringUtils.hasText(sourceKey)) { log.warn("无法从URL提取文件key: {}", fileUrl); return false; }
if (sourceKey.startsWith(DELETED_PATH_PREFIX)) { log.info("文件已在deleted文件夹中: {}", sourceKey); return true; }
String targetKey = DELETED_PATH_PREFIX + sourceKey;
BucketManager bucketManager = getBucketManager(); bucketManager.copy(ossUploadService.getBucket(), sourceKey, ossUploadService.getBucket(), targetKey, true);
bucketManager.delete(ossUploadService.getBucket(), sourceKey);
log.info("文件移动到deleted文件夹成功: {} -> {}", sourceKey, targetKey); return true;
} catch (QiniuException e) { log.error("文件移动到deleted文件夹失败: {}", fileUrl, e); return false; } }
@Override public int batchMoveFilesToDeleted(List<String> fileUrls) { if (fileUrls == null || fileUrls.isEmpty()) { return 0; }
int successCount = 0; for (String fileUrl : fileUrls) { if (moveFileToDeleted(fileUrl)) { successCount++; } }
log.info("批量移动文件到deleted文件夹完成,成功: {}/{}", successCount, fileUrls.size()); return successCount; }
@Override public String restoreFileFromDeleted(String deletedFileUrl) { if (!StringUtils.hasText(deletedFileUrl)) { log.warn("文件URL为空,无法从deleted文件夹恢复"); return null; }
try { String deletedKey = extractKeyFromUrl(deletedFileUrl);
if (!StringUtils.hasText(deletedKey)) { log.warn("无法从URL提取文件key: {}", deletedFileUrl); return null; }
if (!deletedKey.startsWith(DELETED_PATH_PREFIX)) { log.warn("文件不在deleted文件夹中,无需恢复: {}", deletedKey); return deletedFileUrl; }
String restoredKey = deletedKey.substring(DELETED_PATH_PREFIX.length());
BucketManager bucketManager = getBucketManager(); bucketManager.copy(ossUploadService.getBucket(), deletedKey, ossUploadService.getBucket(), restoredKey, true);
bucketManager.delete(ossUploadService.getBucket(), deletedKey);
String restoredUrl = ossUploadService.getDomain() + restoredKey; log.info("文件从deleted文件夹恢复成功: {} -> {}", deletedKey, restoredKey); return restoredUrl;
} catch (QiniuException e) { log.error("文件从deleted文件夹恢复失败: {}", deletedFileUrl, e); return null; } }
@Override public List<String> batchRestoreFilesFromDeleted(List<String> deletedFileUrls) { if (deletedFileUrls == null || deletedFileUrls.isEmpty()) { return new ArrayList<>(); }
List<String> restoredUrls = new ArrayList<>(); int successCount = 0;
for (String deletedFileUrl : deletedFileUrls) { String restoredUrl = restoreFileFromDeleted(deletedFileUrl); if (restoredUrl != null) { restoredUrls.add(restoredUrl); successCount++; } }
log.info("批量从deleted文件夹恢复文件完成,成功: {}/{}", successCount, deletedFileUrls.size()); return restoredUrls; }
|