You've already forked DataMate
feat(data-management): 添加数据集文件取消上传功能
- 在OpenAPI规范中定义了取消上传的REST端点接口 - 实现了DatasetFileApplicationService中的取消上传业务逻辑 - 在FileService中添加了完整的取消上传服务方法 - 创建了DatasetUploadController控制器处理取消上传请求 - 实现了临时分片文件清理和数据库记录删除功能
This commit is contained in:
@@ -447,12 +447,12 @@ paths:
|
|||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
/data-management/datasets/{datasetId}/files/upload/chunk:
|
/data-management/datasets/{datasetId}/files/upload/chunk:
|
||||||
post:
|
post:
|
||||||
tags: [ DatasetFile ]
|
tags: [ DatasetFile ]
|
||||||
operationId: chunkUpload
|
operationId: chunkUpload
|
||||||
summary: 切片上传
|
summary: 切片上传
|
||||||
description: 使用预上传返回的请求ID进行分片上传
|
description: 使用预上传返回的请求ID进行分片上传
|
||||||
parameters:
|
parameters:
|
||||||
- name: datasetId
|
- name: datasetId
|
||||||
in: path
|
in: path
|
||||||
@@ -466,15 +466,32 @@ paths:
|
|||||||
multipart/form-data:
|
multipart/form-data:
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/components/schemas/UploadFileRequest'
|
$ref: '#/components/schemas/UploadFileRequest'
|
||||||
responses:
|
responses:
|
||||||
'200':
|
'200':
|
||||||
description: 上传成功
|
description: 上传成功
|
||||||
|
|
||||||
/data-management/dataset-types:
|
/data-management/datasets/upload/cancel-upload/{reqId}:
|
||||||
get:
|
put:
|
||||||
operationId: getDatasetTypes
|
tags: [ DatasetFile ]
|
||||||
tags: [DatasetType]
|
operationId: cancelUpload
|
||||||
summary: 获取数据集类型列表
|
summary: 取消上传
|
||||||
|
description: 取消预上传请求并清理临时分片
|
||||||
|
parameters:
|
||||||
|
- name: reqId
|
||||||
|
in: path
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
description: 预上传请求ID
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: 取消成功
|
||||||
|
|
||||||
|
/data-management/dataset-types:
|
||||||
|
get:
|
||||||
|
operationId: getDatasetTypes
|
||||||
|
tags: [DatasetType]
|
||||||
|
summary: 获取数据集类型列表
|
||||||
description: 获取所有支持的数据集类型
|
description: 获取所有支持的数据集类型
|
||||||
responses:
|
responses:
|
||||||
'200':
|
'200':
|
||||||
|
|||||||
@@ -499,11 +499,19 @@ public class DatasetFileApplicationService {
|
|||||||
*
|
*
|
||||||
* @param uploadFileRequest 上传请求
|
* @param uploadFileRequest 上传请求
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
public void chunkUpload(String datasetId, UploadFileRequest uploadFileRequest) {
|
public void chunkUpload(String datasetId, UploadFileRequest uploadFileRequest) {
|
||||||
FileUploadResult uploadResult = fileService.chunkUpload(DatasetConverter.INSTANCE.toChunkUploadRequest(uploadFileRequest));
|
FileUploadResult uploadResult = fileService.chunkUpload(DatasetConverter.INSTANCE.toChunkUploadRequest(uploadFileRequest));
|
||||||
saveFileInfoToDb(uploadResult, datasetId);
|
saveFileInfoToDb(uploadResult, datasetId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消上传
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
public void cancelUpload(String reqId) {
|
||||||
|
fileService.cancelUpload(reqId);
|
||||||
|
}
|
||||||
|
|
||||||
private void saveFileInfoToDb(FileUploadResult fileUploadResult, String datasetId) {
|
private void saveFileInfoToDb(FileUploadResult fileUploadResult, String datasetId) {
|
||||||
if (Objects.isNull(fileUploadResult.getSavedFile())) {
|
if (Objects.isNull(fileUploadResult.getSavedFile())) {
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.datamate.datamanagement.interfaces.rest;
|
||||||
|
|
||||||
|
import com.datamate.datamanagement.application.DatasetFileApplicationService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据集上传控制器
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RequestMapping("/data-management/datasets/upload")
|
||||||
|
public class DatasetUploadController {
|
||||||
|
|
||||||
|
private final DatasetFileApplicationService datasetFileApplicationService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消上传
|
||||||
|
*
|
||||||
|
* @param reqId 预上传请求ID
|
||||||
|
*/
|
||||||
|
@PutMapping("/cancel-upload/{reqId}")
|
||||||
|
public ResponseEntity<Void> cancelUpload(@PathVariable("reqId") String reqId) {
|
||||||
|
datasetFileApplicationService.cancelUpload(reqId);
|
||||||
|
return ResponseEntity.ok().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -74,6 +74,26 @@ public class FileService {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消上传
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
public void cancelUpload(String reqId) {
|
||||||
|
if (reqId == null || reqId.isBlank()) {
|
||||||
|
throw BusinessException.of(CommonErrorCode.PARAM_ERROR);
|
||||||
|
}
|
||||||
|
ChunkUploadPreRequest preRequest = chunkUploadRequestMapper.findById(reqId);
|
||||||
|
if (preRequest == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String uploadPath = preRequest.getUploadPath();
|
||||||
|
if (uploadPath != null && !uploadPath.isBlank()) {
|
||||||
|
File tempDir = new File(uploadPath, String.format(ChunksSaver.TEMP_DIR_NAME_FORMAT, preRequest.getId()));
|
||||||
|
ChunksSaver.deleteFolder(tempDir.getPath());
|
||||||
|
}
|
||||||
|
chunkUploadRequestMapper.deleteById(reqId);
|
||||||
|
}
|
||||||
|
|
||||||
private File uploadFile(ChunkUploadRequest fileUploadRequest, ChunkUploadPreRequest preRequest) {
|
private File uploadFile(ChunkUploadRequest fileUploadRequest, ChunkUploadPreRequest preRequest) {
|
||||||
File savedFile = ChunksSaver.saveFile(fileUploadRequest, preRequest);
|
File savedFile = ChunksSaver.saveFile(fileUploadRequest, preRequest);
|
||||||
preRequest.setTimeout(LocalDateTime.now().plusSeconds(DEFAULT_TIMEOUT));
|
preRequest.setTimeout(LocalDateTime.now().plusSeconds(DEFAULT_TIMEOUT));
|
||||||
|
|||||||
Reference in New Issue
Block a user