[api] tus 주소 부터 일단변경

This commit is contained in:
2026-05-26 10:02:08 +09:00
parent 797b12b459
commit 85d593fb9d
8 changed files with 25 additions and 25 deletions
@@ -45,7 +45,7 @@ public class OpenApiConfig {
"/admin/**" "/admin/**"
, "/cors/**" , "/cors/**"
, "/file/**" , "/file/**"
, "/tusFiles/**" , "/tus/file/**"
, "/error" , "/error"
, "/actuator/**" , "/actuator/**"
) )
@@ -67,7 +67,7 @@ public class OpenApiConfig {
.pathsToMatch( .pathsToMatch(
"/cors/**" "/cors/**"
, "/file/**" , "/file/**"
, "/tusFiles/**" , "/tus/file/**"
) )
.build(); .build();
} }
@@ -88,8 +88,8 @@ public class SecurityConfig {
, "/auth/**" , "/auth/**"
, "/user/add" , "/user/add"
, "/user/migration/list" , "/user/migration/list"
, "/tusFiles/tusHook" , "/tus/file/hook"
, "/tusFiles/uploadAuth" , "/tus/file/upload/auth"
, "/file/**" , "/file/**"
).permitAll() ).permitAll()
.anyRequest().authenticated() .anyRequest().authenticated()
@@ -28,7 +28,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
try { try {
String requestUri = request.getRequestURI(); String requestUri = request.getRequestURI();
boolean adminRequest = requestUri.startsWith("/admin/"); boolean adminRequest = requestUri.startsWith("/admin/");
boolean sharedRequest = requestUri.startsWith("/tusFiles/") || requestUri.startsWith("/file/") || requestUri.startsWith("/cors/"); boolean sharedRequest = requestUri.startsWith("/tus/file/") || requestUri.startsWith("/file/") || requestUri.startsWith("/cors/");
String token = resolveToken(request, adminRequest, sharedRequest); String token = resolveToken(request, adminRequest, sharedRequest);
if (token != null && jwtTokenProvider.validateToken(token)) { if (token != null && jwtTokenProvider.validateToken(token)) {
@@ -30,7 +30,7 @@ import java.nio.file.Path;
, description = "TUS 기반 파일 업로드 초기화, 권한 검증, 상태 조회, 훅 처리, 취소 API" , description = "TUS 기반 파일 업로드 초기화, 권한 검증, 상태 조회, 훅 처리, 취소 API"
) )
@RestController @RestController
@RequestMapping("/tusFiles") @RequestMapping("/tus/file")
public class TusFileController { public class TusFileController {
private final TusFileService tusFileService; private final TusFileService tusFileService;
@@ -42,8 +42,8 @@ public class TusFileController {
summary = "파일 업로드 초기화" summary = "파일 업로드 초기화"
, description = "업로드 대상 파일 정보를 DB에 등록하고 fileUuid/uploadToken을 발급합니다." , description = "업로드 대상 파일 정보를 DB에 등록하고 fileUuid/uploadToken을 발급합니다."
) )
@PostMapping("/uploadInit") @PostMapping("/upload/init")
public ResponseEntity<ApiResponse<FileUploadDto>> uploadInit( public ResponseEntity<ApiResponse<FileUploadDto>> tusFileUploadInit(
@Valid @RequestBody FileUploadForm fileUploadForm @Valid @RequestBody FileUploadForm fileUploadForm
) { ) {
FileUploadDto fileUploadDto = fileUploadForm.toFileUploadDto(); FileUploadDto fileUploadDto = fileUploadForm.toFileUploadDto();
@@ -72,8 +72,8 @@ public class TusFileController {
summary = "업로드 권한 검증" summary = "업로드 권한 검증"
, description = "Bearer 업로드 토큰과 fileUuid(및 TUS 메타데이터)를 검증해 업로드 가능 여부를 확인합니다." , description = "Bearer 업로드 토큰과 fileUuid(및 TUS 메타데이터)를 검증해 업로드 가능 여부를 확인합니다."
) )
@GetMapping("/uploadAuth") @GetMapping("/upload/auth")
public ResponseEntity<ApiResponse<String>> uploadAuth( public ResponseEntity<ApiResponse<String>> tusFileUploadAuth(
@RequestHeader(value = "Authorization", required = false) String uploadToken @RequestHeader(value = "Authorization", required = false) String uploadToken
, @RequestHeader(value = "x-File-Uuid", required = false) String fileUuid , @RequestHeader(value = "x-File-Uuid", required = false) String fileUuid
, @RequestHeader(value = "Upload-Metadata", required = false) String uploadMetadata , @RequestHeader(value = "Upload-Metadata", required = false) String uploadMetadata
@@ -107,8 +107,8 @@ public class TusFileController {
summary = "업로드 상태 조회" summary = "업로드 상태 조회"
, description = "fileUuid 기준으로 Redis/DB 업로드 상태(진행률, 상태값)를 조회합니다." , description = "fileUuid 기준으로 Redis/DB 업로드 상태(진행률, 상태값)를 조회합니다."
) )
@PostMapping("/uploadStatus") @PostMapping("/upload/status")
public ResponseEntity<ApiResponse<UploadStatusDto>> uploadStatus( public ResponseEntity<ApiResponse<UploadStatusDto>> tusFileUploadStatus(
@Valid @RequestBody UploadStatusForm uploadStatusForm @Valid @RequestBody UploadStatusForm uploadStatusForm
) { ) {
UploadStatusDto status = tusFileService.getUploadStatus(uploadStatusForm.toUploadStatusDto()); UploadStatusDto status = tusFileService.getUploadStatus(uploadStatusForm.toUploadStatusDto());
@@ -122,8 +122,8 @@ public class TusFileController {
summary = "TUS 훅 수신" summary = "TUS 훅 수신"
, description = "tusd에서 전달되는 pre-create/post-receive/post-finish/post-terminate 이벤트를 반영합니다." , description = "tusd에서 전달되는 pre-create/post-receive/post-finish/post-terminate 이벤트를 반영합니다."
) )
@PostMapping("/tusHook") @PostMapping("/hook")
public ResponseEntity<ApiResponse<String>> tusHook(@RequestBody TusHookForm tusHookForm) { public ResponseEntity<ApiResponse<String>> tusFileHook(@RequestBody TusHookForm tusHookForm) {
boolean accepted = tusFileService.updateFileUploadStatus(tusHookForm.toTusHookDto()); boolean accepted = tusFileService.updateFileUploadStatus(tusHookForm.toTusHookDto());
if (accepted) { if (accepted) {
@@ -137,8 +137,8 @@ public class TusFileController {
summary = "업로드 취소" summary = "업로드 취소"
, description = "현재 로그인 사용자의 fileUuid 업로드를 취소(CANCELED) 처리합니다." , description = "현재 로그인 사용자의 fileUuid 업로드를 취소(CANCELED) 처리합니다."
) )
@PostMapping("/uploadCancel") @PostMapping("/upload/cancel")
public ResponseEntity<ApiResponse<String>> uploadCancel( public ResponseEntity<ApiResponse<String>> tusFileUploadCancel(
@Valid @RequestBody UploadCancelForm uploadCancelForm @Valid @RequestBody UploadCancelForm uploadCancelForm
) { ) {
Integer userTokenIdx = SecurityUtil.getLoginUserTokenIdx(); Integer userTokenIdx = SecurityUtil.getLoginUserTokenIdx();
@@ -165,7 +165,7 @@ public class TusFileController {
summary = "파일 목록 조회" summary = "파일 목록 조회"
, description = "FILE_MASTER_IDX 기준으로 완료된 파일 목록을 조회합니다.") , description = "FILE_MASTER_IDX 기준으로 완료된 파일 목록을 조회합니다.")
@GetMapping("/list/{fileMasterIdx}") @GetMapping("/list/{fileMasterIdx}")
public ResponseEntity<ApiResponse<FileDownloadListDto>> fileListByFileMasterIdx( public ResponseEntity<ApiResponse<FileDownloadListDto>> tusFileList(
@PathVariable Long fileMasterIdx @PathVariable Long fileMasterIdx
) { ) {
@@ -185,7 +185,7 @@ public class TusFileController {
summary = "파일 보기" summary = "파일 보기"
, description = "권한 확인 후 Nginx X-Accel-Redirect로 파일을 inline 조회합니다.") , description = "권한 확인 후 Nginx X-Accel-Redirect로 파일을 inline 조회합니다.")
@GetMapping("/view/{fileUuid}") @GetMapping("/view/{fileUuid}")
public ResponseEntity<Resource> fileView( public ResponseEntity<Resource> tusFileView(
@PathVariable String fileUuid @PathVariable String fileUuid
, HttpServletRequest request , HttpServletRequest request
) throws IOException { ) throws IOException {
@@ -228,7 +228,7 @@ public class TusFileController {
summary = "파일 다운로드" summary = "파일 다운로드"
, description = "권한 확인 후 파일 다운로드 로그를 남기고 redirect 또는 Nginx X-Accel-Redirect로 파일 다운로드 합니다.") , description = "권한 확인 후 파일 다운로드 로그를 남기고 redirect 또는 Nginx X-Accel-Redirect로 파일 다운로드 합니다.")
@GetMapping("/download/{fileUuid}") @GetMapping("/download/{fileUuid}")
public ResponseEntity<Resource> fileDownload( public ResponseEntity<Resource> tusFileDownload(
@PathVariable String fileUuid @PathVariable String fileUuid
, HttpServletRequest request , HttpServletRequest request
) throws IOException { ) throws IOException {
@@ -272,7 +272,7 @@ public class TusFileController {
description = "fileUuid 기준으로 완료된 파일(STATUS = 3)을 논리 삭제 처리합니다. 실제 파일은 삭제하지 않고 DEL_YN = 'Y'만 반영합니다." description = "fileUuid 기준으로 완료된 파일(STATUS = 3)을 논리 삭제 처리합니다. 실제 파일은 삭제하지 않고 DEL_YN = 'Y'만 반영합니다."
) )
@PostMapping("/delete") @PostMapping("/delete")
public ResponseEntity<ApiResponse<String>> fileDelete( public ResponseEntity<ApiResponse<String>> tusFileDelete(
@Valid @RequestBody FileDeleteForm fileDeleteForm @Valid @RequestBody FileDeleteForm fileDeleteForm
) { ) {
boolean deleted = tusFileService.updateFileDelete(fileDeleteForm.toFileDeleteDto()); boolean deleted = tusFileService.updateFileDelete(fileDeleteForm.toFileDeleteDto());
@@ -14,7 +14,7 @@ public class FileUploadDto {
@Schema(description = "파일 마스터 PK", example = "1") @Schema(description = "파일 마스터 PK", example = "1")
private Long fileMasterIdx; private Long fileMasterIdx;
@Schema(description = "TUS 업로드 엔드포인트", example = "/tusFiles/upload") @Schema(description = "TUS 업로드 엔드포인트", example = "/tus/file/upload")
private String tusEndpoint; private String tusEndpoint;
@JsonIgnore @JsonIgnore
@@ -603,8 +603,8 @@ public class TusFileService {
List<FileDownloadItemDto> itemList = tusFileMapper.selectFileDownloadListByFileMasterIdx(fileDownloadDto); List<FileDownloadItemDto> itemList = tusFileMapper.selectFileDownloadListByFileMasterIdx(fileDownloadDto);
for (FileDownloadItemDto item : itemList) { for (FileDownloadItemDto item : itemList) {
item.setViewUrl("/tusFiles/view/" + item.getFileUuid()); item.setViewUrl("/tus/file/view/" + item.getFileUuid());
item.setDownloadUrl("/tusFiles/download/" + item.getFileUuid()); item.setDownloadUrl("/tus/file/download/" + item.getFileUuid());
} }
fileDownloadList.setItemList(itemList); fileDownloadList.setItemList(itemList);
+1 -1
View File
@@ -61,7 +61,7 @@ swagger:
tus-file: tus-file:
upload: upload:
tus-endpoint: https://file-alist.pjt.kr/tus/files/ tus-endpoint: https://file-alist.pjt.kr/tus/file/
public-base-url: https://file-alist.pjt.kr public-base-url: https://file-alist.pjt.kr
tmp-root: /srv/project/alist/uploads/tmp tmp-root: /srv/project/alist/uploads/tmp
final-root: /srv/project/alist/uploads final-root: /srv/project/alist/uploads
+1 -1
View File
@@ -63,7 +63,7 @@ swagger:
tus-file: tus-file:
upload: upload:
tus-endpoint: https://file-alist.pjt.kr/tus/files/ tus-endpoint: https://file-alist.pjt.kr/tus/file/
public-base-url: https://file-alist.pjt.kr public-base-url: https://file-alist.pjt.kr
tmp-root: /srv/project/alist/uploads/tmp tmp-root: /srv/project/alist/uploads/tmp
final-root: /srv/project/alist/uploads final-root: /srv/project/alist/uploads