[파일 업로드] tusHook 작업
- 파일 이동작업
This commit is contained in:
@@ -15,6 +15,8 @@ public class FileMoveTaskDto {
|
|||||||
private Long sizeBytes;
|
private Long sizeBytes;
|
||||||
private Long uploadedBytes;
|
private Long uploadedBytes;
|
||||||
|
|
||||||
|
private String folderPath;
|
||||||
|
|
||||||
private String saveName;
|
private String saveName;
|
||||||
private String savePath;
|
private String savePath;
|
||||||
private String ext;
|
private String ext;
|
||||||
|
|||||||
@@ -382,13 +382,36 @@ public class FileService {
|
|||||||
+ (ext.isBlank() ? "" : "." + ext);
|
+ (ext.isBlank() ? "" : "." + ext);
|
||||||
|
|
||||||
LocalDate now = LocalDate.now();
|
LocalDate now = LocalDate.now();
|
||||||
|
String folder = normalizeFolderPath(task.getFolderPath());
|
||||||
|
|
||||||
return Paths.get(uploadFinalRoot,
|
return Paths.get(uploadFinalRoot,
|
||||||
|
folder,
|
||||||
String.valueOf(now.getYear()),
|
String.valueOf(now.getYear()),
|
||||||
String.format("%02d", now.getMonthValue()),
|
String.format("%02d", now.getMonthValue()),
|
||||||
String.format("%02d", now.getDayOfMonth()),
|
String.format("%02d", now.getDayOfMonth()),
|
||||||
fileName);
|
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) {
|
private String toSavePath(Path finalPath) {
|
||||||
// DB 저장용 상대경로(운영 규칙에 맞게 조정)
|
// DB 저장용 상대경로(운영 규칙에 맞게 조정)
|
||||||
// 예: /2026/03/09/xxx.zip
|
// 예: /2026/03/09/xxx.zip
|
||||||
|
|||||||
@@ -195,12 +195,27 @@
|
|||||||
|
|
||||||
<select id="selectMoveTaskByFileUuid" resultType="com.alist.api.common.modules.file.dto.FileMoveTaskDto">
|
<select id="selectMoveTaskByFileUuid" resultType="com.alist.api.common.modules.file.dto.FileMoveTaskDto">
|
||||||
/*FileMapper.selectMoveTaskByFileUuid*/
|
/*FileMapper.selectMoveTaskByFileUuid*/
|
||||||
SELECT FILE_DETAIL_IDX, FILE_MASTER_IDX, FILE_UUID, TUS_UPLOAD_ID,
|
SELECT LFD.FILE_DETAIL_IDX
|
||||||
ORIGIN_NAME, CONTENT_TYPE, SIZE_BYTES, UPLOADED_BYTES,
|
, LFD.FILE_MASTER_IDX
|
||||||
SAVE_NAME, SAVE_PATH, `EXT`, MOVE_YN, MOVE_TRY_COUNT, MOVE_LAST_ERROR
|
, LFD.FILE_UUID
|
||||||
FROM ALISTLMS.FILE_DETAIL
|
, LFD.TUS_UPLOAD_ID
|
||||||
WHERE FILE_UUID = #{fileUuid}
|
, LFD.ORIGIN_NAME
|
||||||
AND DEL_YN = 'N'
|
, 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
|
LIMIT 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user