diff --git a/src/main/java/com/alist/api/common/modules/file/FileController.java b/src/main/java/com/alist/api/common/modules/file/FileController.java index c54b1ca..e8db104 100644 --- a/src/main/java/com/alist/api/common/modules/file/FileController.java +++ b/src/main/java/com/alist/api/common/modules/file/FileController.java @@ -1,6 +1,7 @@ package com.alist.api.common.modules.file; import com.alist.api.common.modules.file.dto.UploadTokenDto; +import com.alist.api.common.modules.file.form.TusHookForm; import com.alist.api.common.response.ApiResponse; import com.alist.api.common.response.ApiResponseCode; import com.alist.api.common.modules.file.dto.UploadStartDto; @@ -82,8 +83,8 @@ public class FileController { } @PostMapping("/tusHook") - public ResponseEntity> tusHook(@RequestBody Map payload) { - log.debug("[tusHook] payload={}", payload); + public ResponseEntity> tusHook(@RequestBody TusHookForm tusHookForm) { + fileService.insertFileAndSave(tusHookForm.tusHookDto()); return ApiResponse.entity("", ApiResponseCode.CODE_200); } } diff --git a/src/main/java/com/alist/api/common/modules/file/dto/TusHookDto.java b/src/main/java/com/alist/api/common/modules/file/dto/TusHookDto.java new file mode 100644 index 0000000..cb169d3 --- /dev/null +++ b/src/main/java/com/alist/api/common/modules/file/dto/TusHookDto.java @@ -0,0 +1,13 @@ +package com.alist.api.common.modules.file.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class TusHookDto { + private TusHookEventDto tusHookEventDto; + private TusHookUploadDto tusHookUploadDto; +} diff --git a/src/main/java/com/alist/api/common/modules/file/dto/TusHookEventDto.java b/src/main/java/com/alist/api/common/modules/file/dto/TusHookEventDto.java new file mode 100644 index 0000000..9770184 --- /dev/null +++ b/src/main/java/com/alist/api/common/modules/file/dto/TusHookEventDto.java @@ -0,0 +1,13 @@ +package com.alist.api.common.modules.file.dto; + + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class TusHookEventDto { + private String Type; +} diff --git a/src/main/java/com/alist/api/common/modules/file/dto/TusHookUploadDto.java b/src/main/java/com/alist/api/common/modules/file/dto/TusHookUploadDto.java new file mode 100644 index 0000000..f767e38 --- /dev/null +++ b/src/main/java/com/alist/api/common/modules/file/dto/TusHookUploadDto.java @@ -0,0 +1,16 @@ +package com.alist.api.common.modules.file.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; + +import java.util.Map; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class TusHookUploadDto { + private String id; + private Long size; + private Map metaData; +} diff --git a/src/main/java/com/alist/api/common/modules/file/form/TusHookForm.java b/src/main/java/com/alist/api/common/modules/file/form/TusHookForm.java new file mode 100644 index 0000000..9ac557e --- /dev/null +++ b/src/main/java/com/alist/api/common/modules/file/form/TusHookForm.java @@ -0,0 +1,24 @@ +package com.alist.api.common.modules.file.form; + +import com.alist.api.common.modules.file.dto.TusHookDto; +import com.alist.api.common.modules.file.dto.TusHookEventDto; +import com.alist.api.common.modules.file.dto.TusHookUploadDto; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class TusHookForm { + private TusHookEventDto event; + private TusHookUploadDto upload; + + public TusHookDto tusHookDto() { + TusHookDto tusHookDto = new TusHookDto(); + tusHookDto.setTusHookEventDto(this.event); + tusHookDto.setTusHookUploadDto(this.upload); + + return tusHookDto; + } +} diff --git a/src/main/java/com/alist/api/common/modules/file/service/FileService.java b/src/main/java/com/alist/api/common/modules/file/service/FileService.java index af16dd9..13b0718 100644 --- a/src/main/java/com/alist/api/common/modules/file/service/FileService.java +++ b/src/main/java/com/alist/api/common/modules/file/service/FileService.java @@ -1,14 +1,19 @@ package com.alist.api.common.modules.file.service; +import com.alist.api.common.modules.file.dto.TusHookDto; +import com.alist.api.common.modules.file.dto.TusHookUploadDto; import com.alist.api.common.modules.file.dto.UploadStartDto; import com.alist.api.common.modules.file.dto.UploadTokenDto; import com.alist.api.common.modules.file.mapper.FileMapper; import com.alist.api.config.jwt.JwtTokenProvider; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.util.Map; import java.util.UUID; +@Slf4j @Service public class FileService { @Value("${file.upload.tus-endpoint}") @@ -67,4 +72,24 @@ public class FileService { return uploadTokenDto; } + + public void insertFileAndSave(TusHookDto tusHookDto) { + if (tusHookDto == null || tusHookDto.getTusHookEventDto() == null || tusHookDto.getTusHookUploadDto() == null) { + log.debug("[tusHook] invalid payload"); + return; + } + + String eventType = tusHookDto.getTusHookEventDto().getType(); + TusHookUploadDto upload = tusHookDto.getTusHookUploadDto(); + Map meta = upload.getMetaData(); + + String uploadId = upload.getId(); + Long size = upload.getSize(); + String fileMasterKey = meta == null ? null : meta.get("fileMasterKey"); + String filename = meta == null ? null : meta.get("filename"); + String filetype = meta == null ? null : meta.get("filetype"); + + log.debug("[tusHook] eventType={}, uploadId={}, size={}, fileMasterKey={}, filename={}, filetype={}", + eventType, uploadId, size, fileMasterKey, filename, filetype); + } }