[파일 업로드] tusHook 작업

- 파일 이동작업
This commit is contained in:
2026-03-09 17:29:27 +09:00
parent cf3fa4845f
commit 2d1bc74099
3 changed files with 46 additions and 6 deletions
@@ -15,6 +15,8 @@ public class FileMoveTaskDto {
private Long sizeBytes;
private Long uploadedBytes;
private String folderPath;
private String saveName;
private String savePath;
private String ext;
@@ -382,13 +382,36 @@ public class FileService {
+ (ext.isBlank() ? "" : "." + ext);
LocalDate now = LocalDate.now();
String folder = normalizeFolderPath(task.getFolderPath());
return Paths.get(uploadFinalRoot,
folder,
String.valueOf(now.getYear()),
String.format("%02d", now.getMonthValue()),
String.format("%02d", now.getDayOfMonth()),
fileName);
}
private String normalizeFolderPath(String folderPath) {
if (folderPath == null || folderPath.isBlank() || "/".equals(folderPath.trim())) {
return "default";
}
String s = folderPath.trim().replace("\\", "/");
// 앞뒤 슬래시 제거
while (s.startsWith("/")) s = s.substring(1);
while (s.endsWith("/")) s = s.substring(0, s.length() - 1);
// 경로 역참조 차단
s = s.replace("..", "");
// 비어버리면 기본 폴더
if (s.isBlank()) return "default";
return s;
}
private String toSavePath(Path finalPath) {
// DB 저장용 상대경로(운영 규칙에 맞게 조정)
// 예: /2026/03/09/xxx.zip
@@ -195,12 +195,27 @@
<select id="selectMoveTaskByFileUuid" resultType="com.alist.api.common.modules.file.dto.FileMoveTaskDto">
/*FileMapper.selectMoveTaskByFileUuid*/
SELECT FILE_DETAIL_IDX, FILE_MASTER_IDX, FILE_UUID, TUS_UPLOAD_ID,
ORIGIN_NAME, CONTENT_TYPE, SIZE_BYTES, UPLOADED_BYTES,
SAVE_NAME, SAVE_PATH, `EXT`, MOVE_YN, MOVE_TRY_COUNT, MOVE_LAST_ERROR
FROM ALISTLMS.FILE_DETAIL
WHERE FILE_UUID = #{fileUuid}
AND DEL_YN = 'N'
SELECT LFD.FILE_DETAIL_IDX
, LFD.FILE_MASTER_IDX
, LFD.FILE_UUID
, LFD.TUS_UPLOAD_ID
, LFD.ORIGIN_NAME
, LFD.CONTENT_TYPE
, LFD.SIZE_BYTES
, LFD.UPLOADED_BYTES
, LFM.FOLDER_PATH
, LFD.SAVE_NAME
, LFD.SAVE_PATH
, LFD.`EXT`
, LFD.MOVE_YN
, LFD.MOVE_TRY_COUNT
, LFD.MOVE_LAST_ERROR
FROM ALISTLMS.FILE_DETAIL LFD
INNER JOIN ALISTLMS.FILE_MASTER LFM
ON LFM.FILE_MASTER_IDX = LFD.FILE_MASTER_IDX
AND LFM.DEL_YN = 'N'
WHERE LFD.FILE_UUID = #{fileUuid}
AND LFD.DEL_YN = 'N'
LIMIT 1
</select>