업로드 관련 수정
This commit is contained in:
@@ -490,7 +490,8 @@ public class FIleChecker {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean multipartChunkSaveTo(MultipartFile mfile, String targetPath, int chunkIndex) {
|
||||
public static boolean multipartChunkSaveTo(
|
||||
MultipartFile mfile, String targetPath, int chunkIndex) {
|
||||
File dest = new File(targetPath, String.valueOf(chunkIndex));
|
||||
|
||||
boolean fileUpload = true;
|
||||
|
||||
@@ -44,7 +44,7 @@ public class SecurityConfig {
|
||||
.authorizeHttpRequests(
|
||||
auth ->
|
||||
auth
|
||||
// .requestMatchers("/chunk_upload_test.html").authenticated()
|
||||
// .requestMatchers("/chunk_upload_test.html").authenticated()
|
||||
|
||||
// 맵시트 영역 전체 허용 (우선순위 최상단)
|
||||
.requestMatchers("/api/mapsheet/**")
|
||||
|
||||
@@ -13,7 +13,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.UUID;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -106,33 +105,31 @@ public class ModelMngApiController {
|
||||
return ApiResponseDto.okObject(modelMngService.removeModel(UUID.fromString(uuid)));
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "모델등록")
|
||||
@PostMapping
|
||||
public ApiResponseDto<ApiResponseDto.ResponseObj> ModelMgmt(
|
||||
@RequestBody @Valid ModelMngDto.AddReq addReq) {
|
||||
@RequestBody @Valid ModelMngDto.AddReq addReq) {
|
||||
|
||||
return ApiResponseDto.ok(modelMngService.insertModel(addReq));
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "데이터셋 대용량 파일 분할 전송", description = "데이터셋 파일 대용량 파일을 청크 단위로 전송합니다.")
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(responseCode = "200", description = "청크 업로드 성공", content = @Content),
|
||||
@ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content),
|
||||
@ApiResponse(responseCode = "404", description = "업로드 세션을 찾을 수 없음", content = @Content),
|
||||
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||
})
|
||||
value = {
|
||||
@ApiResponse(responseCode = "200", description = "청크 업로드 성공", content = @Content),
|
||||
@ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content),
|
||||
@ApiResponse(responseCode = "404", description = "업로드 세션을 찾을 수 없음", content = @Content),
|
||||
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||
})
|
||||
@PostMapping(value = "/file-chunk-upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
public ApiResponseDto<UploadDto.UploadRes> fileChunkUpload(
|
||||
@RequestParam("uuid") UUID uuid,
|
||||
@RequestParam("fileName") String fileName,
|
||||
@RequestParam("fileSize") long fileSize,
|
||||
// @RequestParam("fileHash") String fileHash,
|
||||
@RequestParam("chunkIndex") Integer chunkIndex,
|
||||
@RequestParam("chunkTotalIndex") Integer chunkTotalIndex,
|
||||
@RequestPart("chunkFile") MultipartFile chunkFile) {
|
||||
@RequestParam("uuid") UUID uuid,
|
||||
@RequestParam("fileName") String fileName,
|
||||
@RequestParam("fileSize") long fileSize,
|
||||
// @RequestParam("fileHash") String fileHash,
|
||||
@RequestParam("chunkIndex") Integer chunkIndex,
|
||||
@RequestParam("chunkTotalIndex") Integer chunkTotalIndex,
|
||||
@RequestPart("chunkFile") MultipartFile chunkFile) {
|
||||
|
||||
String uploadDivi = "model";
|
||||
|
||||
@@ -147,7 +144,7 @@ public class ModelMngApiController {
|
||||
upAddReqDto.setFinalPath(modelDir);
|
||||
upAddReqDto.setTempPath(modelTmpDir);
|
||||
|
||||
System.out.println("uuid === "+ uuid);
|
||||
System.out.println("uuid === " + uuid);
|
||||
|
||||
return ApiResponseDto.ok(modelMngService.uploadChunkModelFile(upAddReqDto, chunkFile));
|
||||
}
|
||||
|
||||
@@ -125,9 +125,7 @@ public class ModelMngDto {
|
||||
private String fileName;
|
||||
private String memo;
|
||||
|
||||
@JsonIgnore
|
||||
private UUID uuid;
|
||||
|
||||
@JsonIgnore private UUID uuid;
|
||||
}
|
||||
|
||||
@Schema(name = "searchReq", description = "검색 요청")
|
||||
|
||||
@@ -59,7 +59,6 @@ public class ModelMngService {
|
||||
return new ApiResponseDto.ResponseObj(ApiResponseDto.ApiResponseCode.OK, "삭제되었습니다.");
|
||||
}
|
||||
|
||||
|
||||
public ApiResponseDto.ResponseObj insertModel(ModelMngDto.AddReq addReq) {
|
||||
UUID uuid = UUID.randomUUID();
|
||||
addReq.setUuid(uuid);
|
||||
@@ -67,12 +66,10 @@ public class ModelMngService {
|
||||
return new ApiResponseDto.ResponseObj(ApiResponseDto.ApiResponseCode.OK, "등록되었습니다.");
|
||||
}
|
||||
|
||||
public UploadDto.UploadRes uploadChunkModelFile(UploadDto.UploadAddReq upAddReqDto, MultipartFile chunkFile)
|
||||
{
|
||||
public UploadDto.UploadRes uploadChunkModelFile(
|
||||
UploadDto.UploadAddReq upAddReqDto, MultipartFile chunkFile) {
|
||||
UploadDto.UploadRes upRes = uploadService.uploadChunk(upAddReqDto, chunkFile);
|
||||
|
||||
return upRes;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
package com.kamco.cd.kamcoback.postgres.core;
|
||||
|
||||
import com.kamco.cd.kamcoback.config.api.ApiResponseDto;
|
||||
import com.kamco.cd.kamcoback.model.dto.ModelMngDto;
|
||||
import com.kamco.cd.kamcoback.postgres.entity.ModelMngEntity;
|
||||
import com.kamco.cd.kamcoback.postgres.repository.model.ModelMngRepository;
|
||||
import jakarta.persistence.EntityNotFoundException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.UUID;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -35,15 +32,15 @@ public class ModelMngCoreService {
|
||||
.orElseThrow(() -> new EntityNotFoundException("model을 찾을 수 없습니다."));
|
||||
*/
|
||||
// id 코드 deleted = true 업데이트
|
||||
//entity.deleted();
|
||||
// entity.deleted();
|
||||
|
||||
modelMngRepository.deleteByModelUuid(uuid);
|
||||
}
|
||||
|
||||
public void insertModel(ModelMngDto.AddReq addReq){
|
||||
public void insertModel(ModelMngDto.AddReq addReq) {
|
||||
|
||||
//ModelMngEntity addEntity = new ModelMngEntity();
|
||||
//addEntity.setModelType(addReq.getModelType());
|
||||
// ModelMngEntity addEntity = new ModelMngEntity();
|
||||
// addEntity.setModelType(addReq.getModelType());
|
||||
|
||||
modelMngRepository.insertModel(addReq);
|
||||
}
|
||||
|
||||
@@ -12,8 +12,7 @@ public class UploadSessionCoreService {
|
||||
|
||||
private final UploadSessionRepository uploadSessionRepository;
|
||||
|
||||
public void createUploadSession(UploadDto.UploadAddReq addReq)
|
||||
{
|
||||
public void createUploadSession(UploadDto.UploadAddReq addReq) {
|
||||
/*
|
||||
UUID newUuid = UUID.randomUUID();
|
||||
|
||||
@@ -39,18 +38,17 @@ public class UploadSessionCoreService {
|
||||
*/
|
||||
|
||||
uploadSessionRepository.insertUploadSession(addReq);
|
||||
|
||||
}
|
||||
|
||||
public UploadDto.uploadDto findByDatasetUid(Long datasetId, String uploadDivi){
|
||||
public UploadDto.uploadDto findByDatasetUid(Long datasetId, String uploadDivi) {
|
||||
return uploadSessionRepository.findByDatasetUid(datasetId, uploadDivi);
|
||||
}
|
||||
|
||||
public UploadDto.uploadDto findByUuid(UUID uuid){
|
||||
public UploadDto.uploadDto findByUuid(UUID uuid) {
|
||||
return uploadSessionRepository.findByUuid(uuid);
|
||||
}
|
||||
|
||||
public void updateUploadSessionStatus(UploadDto.UploadAddReq addReq){
|
||||
public void updateUploadSessionStatus(UploadDto.UploadAddReq addReq) {
|
||||
uploadSessionRepository.updateUploadSessionStatus(addReq);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,5 +86,4 @@ public class UploadSessionEntity {
|
||||
@ColumnDefault("uuid_generate_v4()")
|
||||
@Column(name = "uuid", nullable = false)
|
||||
private UUID uuid;
|
||||
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ public interface ModelMngRepositoryCustom {
|
||||
|
||||
Optional<ModelMngEntity> findByModelUuid(UUID uuid);
|
||||
|
||||
|
||||
void insertModel(ModelMngDto.AddReq addReq);
|
||||
|
||||
void deleteByModelUuid(UUID uuid);
|
||||
|
||||
@@ -123,10 +123,7 @@ public class ModelMngRepositoryImpl extends QuerydslRepositorySupport
|
||||
System.out.println("uuid == " + uuid);
|
||||
|
||||
return Optional.ofNullable(
|
||||
queryFactory
|
||||
.selectFrom(modelMngEntity)
|
||||
.where(modelMngEntity.uuid.eq(uuid))
|
||||
.fetchOne());
|
||||
queryFactory.selectFrom(modelMngEntity).where(modelMngEntity.uuid.eq(uuid)).fetchOne());
|
||||
}
|
||||
|
||||
private BooleanExpression eventEndedAtBetween(
|
||||
@@ -172,33 +169,32 @@ public class ModelMngRepositoryImpl extends QuerydslRepositorySupport
|
||||
@Override
|
||||
public void insertModel(@Valid ModelMngDto.AddReq addReq) {
|
||||
long execCount =
|
||||
queryFactory
|
||||
.insert(modelMngEntity)
|
||||
.columns(
|
||||
modelMngEntity.modelVer,
|
||||
modelMngEntity.modelType,
|
||||
modelMngEntity.filePath,
|
||||
modelMngEntity.fileName,
|
||||
modelMngEntity.memo,
|
||||
modelMngEntity.uuid)
|
||||
.values(
|
||||
addReq.getModelVer(),
|
||||
addReq.getModelType(),
|
||||
addReq.getFilePath(),
|
||||
addReq.getFileName(),
|
||||
addReq.getMemo(),
|
||||
addReq.getUuid())
|
||||
.execute();
|
||||
queryFactory
|
||||
.insert(modelMngEntity)
|
||||
.columns(
|
||||
modelMngEntity.modelVer,
|
||||
modelMngEntity.modelType,
|
||||
modelMngEntity.filePath,
|
||||
modelMngEntity.fileName,
|
||||
modelMngEntity.memo,
|
||||
modelMngEntity.uuid)
|
||||
.values(
|
||||
addReq.getModelVer(),
|
||||
addReq.getModelType(),
|
||||
addReq.getFilePath(),
|
||||
addReq.getFileName(),
|
||||
addReq.getMemo(),
|
||||
addReq.getUuid())
|
||||
.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByModelUuid(UUID uuid){
|
||||
public void deleteByModelUuid(UUID uuid) {
|
||||
long execCount =
|
||||
queryFactory
|
||||
.update(modelMngEntity)
|
||||
.set(modelMngEntity.deleted, true)
|
||||
.where(modelMngEntity.uuid.eq(uuid))
|
||||
.execute();
|
||||
queryFactory
|
||||
.update(modelMngEntity)
|
||||
.set(modelMngEntity.deleted, true)
|
||||
.where(modelMngEntity.uuid.eq(uuid))
|
||||
.execute();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,19 +1,15 @@
|
||||
package com.kamco.cd.kamcoback.postgres.repository.upload;
|
||||
|
||||
|
||||
|
||||
import com.kamco.cd.kamcoback.upload.dto.UploadDto;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface UploadSessionRepositoryCustom {
|
||||
|
||||
|
||||
void insertUploadSession(UploadDto.UploadAddReq addReq);
|
||||
|
||||
UploadDto.uploadDto findByDatasetUid(Long datasetId, String uploadDivi);
|
||||
|
||||
UploadDto.uploadDto findByUuid(UUID uuid);
|
||||
|
||||
void updateUploadSessionStatus(UploadDto.UploadAddReq addReq);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.kamco.cd.kamcoback.postgres.repository.upload;
|
||||
|
||||
|
||||
import static com.kamco.cd.kamcoback.postgres.entity.QUploadSessionEntity.uploadSessionEntity;
|
||||
|
||||
import com.kamco.cd.kamcoback.postgres.entity.UploadSessionEntity;
|
||||
@@ -30,113 +29,104 @@ public class UploadSessionRepositoryImpl extends QuerydslRepositorySupport
|
||||
@Override
|
||||
public void insertUploadSession(UploadDto.UploadAddReq addReq) {
|
||||
long execCnt =
|
||||
queryFactory
|
||||
.insert(uploadSessionEntity)
|
||||
.columns(
|
||||
uploadSessionEntity.uploadId,
|
||||
uploadSessionEntity.datasetId,
|
||||
uploadSessionEntity.fileName,
|
||||
uploadSessionEntity.fileSize,
|
||||
uploadSessionEntity.finalPath,
|
||||
uploadSessionEntity.status,
|
||||
uploadSessionEntity.tempPath,
|
||||
uploadSessionEntity.chunkIndex,
|
||||
uploadSessionEntity.chunkTotalIndex,
|
||||
uploadSessionEntity.uploadDivi,
|
||||
uploadSessionEntity.fileHash,
|
||||
uploadSessionEntity.uuid
|
||||
)
|
||||
.values(
|
||||
addReq.getUploadId(),
|
||||
addReq.getDatasetId(),
|
||||
addReq.getFileName(),
|
||||
addReq.getFileSize(),
|
||||
addReq.getFinalPath(),
|
||||
addReq.getStatus(),
|
||||
addReq.getTempPath(),
|
||||
addReq.getChunkIndex(),
|
||||
addReq.getChunkTotalIndex(),
|
||||
addReq.getUploadDivi(),
|
||||
addReq.getFileHash(),
|
||||
addReq.getUuid()
|
||||
)
|
||||
.execute();
|
||||
|
||||
|
||||
queryFactory
|
||||
.insert(uploadSessionEntity)
|
||||
.columns(
|
||||
uploadSessionEntity.uploadId,
|
||||
uploadSessionEntity.datasetId,
|
||||
uploadSessionEntity.fileName,
|
||||
uploadSessionEntity.fileSize,
|
||||
uploadSessionEntity.finalPath,
|
||||
uploadSessionEntity.status,
|
||||
uploadSessionEntity.tempPath,
|
||||
uploadSessionEntity.chunkIndex,
|
||||
uploadSessionEntity.chunkTotalIndex,
|
||||
uploadSessionEntity.uploadDivi,
|
||||
uploadSessionEntity.fileHash,
|
||||
uploadSessionEntity.uuid)
|
||||
.values(
|
||||
addReq.getUploadId(),
|
||||
addReq.getDatasetId(),
|
||||
addReq.getFileName(),
|
||||
addReq.getFileSize(),
|
||||
addReq.getFinalPath(),
|
||||
addReq.getStatus(),
|
||||
addReq.getTempPath(),
|
||||
addReq.getChunkIndex(),
|
||||
addReq.getChunkTotalIndex(),
|
||||
addReq.getUploadDivi(),
|
||||
addReq.getFileHash(),
|
||||
addReq.getUuid())
|
||||
.execute();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public UploadDto.uploadDto findByDatasetUid(Long datasetId, String uploadDivi) {
|
||||
|
||||
UploadDto.uploadDto foundContent =
|
||||
queryFactory
|
||||
.select(
|
||||
Projections.constructor(
|
||||
UploadDto.uploadDto.class,
|
||||
uploadSessionEntity.uploadId,
|
||||
uploadSessionEntity.datasetId,
|
||||
uploadSessionEntity.fileName,
|
||||
uploadSessionEntity.fileSize,
|
||||
uploadSessionEntity.finalPath,
|
||||
uploadSessionEntity.uploadDivi,
|
||||
uploadSessionEntity.status,
|
||||
uploadSessionEntity.tempPath,
|
||||
uploadSessionEntity.chunkIndex,
|
||||
uploadSessionEntity.chunkTotalIndex,
|
||||
uploadSessionEntity.fileHash,
|
||||
uploadSessionEntity.uuid
|
||||
))
|
||||
.from(uploadSessionEntity)
|
||||
.where(uploadSessionEntity.datasetId.eq(datasetId)
|
||||
.and(uploadSessionEntity.uploadDivi.eq(uploadDivi)))
|
||||
.limit(1)
|
||||
.fetchOne();
|
||||
queryFactory
|
||||
.select(
|
||||
Projections.constructor(
|
||||
UploadDto.uploadDto.class,
|
||||
uploadSessionEntity.uploadId,
|
||||
uploadSessionEntity.datasetId,
|
||||
uploadSessionEntity.fileName,
|
||||
uploadSessionEntity.fileSize,
|
||||
uploadSessionEntity.finalPath,
|
||||
uploadSessionEntity.uploadDivi,
|
||||
uploadSessionEntity.status,
|
||||
uploadSessionEntity.tempPath,
|
||||
uploadSessionEntity.chunkIndex,
|
||||
uploadSessionEntity.chunkTotalIndex,
|
||||
uploadSessionEntity.fileHash,
|
||||
uploadSessionEntity.uuid))
|
||||
.from(uploadSessionEntity)
|
||||
.where(
|
||||
uploadSessionEntity
|
||||
.datasetId
|
||||
.eq(datasetId)
|
||||
.and(uploadSessionEntity.uploadDivi.eq(uploadDivi)))
|
||||
.limit(1)
|
||||
.fetchOne();
|
||||
|
||||
return foundContent;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public UploadDto.uploadDto findByUuid(UUID uuid) {
|
||||
|
||||
UploadDto.uploadDto foundContent =
|
||||
queryFactory
|
||||
.select(
|
||||
Projections.constructor(
|
||||
UploadDto.uploadDto.class,
|
||||
uploadSessionEntity.uploadId,
|
||||
uploadSessionEntity.datasetId,
|
||||
uploadSessionEntity.fileName,
|
||||
uploadSessionEntity.fileSize,
|
||||
uploadSessionEntity.finalPath,
|
||||
uploadSessionEntity.uploadDivi,
|
||||
uploadSessionEntity.status,
|
||||
uploadSessionEntity.tempPath,
|
||||
uploadSessionEntity.chunkIndex,
|
||||
uploadSessionEntity.chunkTotalIndex,
|
||||
uploadSessionEntity.fileHash,
|
||||
uploadSessionEntity.uuid
|
||||
))
|
||||
.from(uploadSessionEntity)
|
||||
.where(uploadSessionEntity.uuid.eq(uuid))
|
||||
.limit(1)
|
||||
.fetchOne();
|
||||
queryFactory
|
||||
.select(
|
||||
Projections.constructor(
|
||||
UploadDto.uploadDto.class,
|
||||
uploadSessionEntity.uploadId,
|
||||
uploadSessionEntity.datasetId,
|
||||
uploadSessionEntity.fileName,
|
||||
uploadSessionEntity.fileSize,
|
||||
uploadSessionEntity.finalPath,
|
||||
uploadSessionEntity.uploadDivi,
|
||||
uploadSessionEntity.status,
|
||||
uploadSessionEntity.tempPath,
|
||||
uploadSessionEntity.chunkIndex,
|
||||
uploadSessionEntity.chunkTotalIndex,
|
||||
uploadSessionEntity.fileHash,
|
||||
uploadSessionEntity.uuid))
|
||||
.from(uploadSessionEntity)
|
||||
.where(uploadSessionEntity.uuid.eq(uuid))
|
||||
.limit(1)
|
||||
.fetchOne();
|
||||
|
||||
return foundContent;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void updateUploadSessionStatus(UploadDto.UploadAddReq addReq){
|
||||
public void updateUploadSessionStatus(UploadDto.UploadAddReq addReq) {
|
||||
long fileCount =
|
||||
queryFactory
|
||||
.update(uploadSessionEntity)
|
||||
.set(uploadSessionEntity.chunkIndex, addReq.getChunkIndex())
|
||||
.set(uploadSessionEntity.status, addReq.getStatus())
|
||||
.where(uploadSessionEntity.uploadId.eq(addReq.getUploadId()))
|
||||
.execute();
|
||||
queryFactory
|
||||
.update(uploadSessionEntity)
|
||||
.set(uploadSessionEntity.chunkIndex, addReq.getChunkIndex())
|
||||
.set(uploadSessionEntity.status, addReq.getStatus())
|
||||
.where(uploadSessionEntity.uploadId.eq(addReq.getUploadId()))
|
||||
.execute();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -81,13 +81,13 @@ public class UploadApiController {
|
||||
})
|
||||
@PostMapping(value = "/file-chunk-upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
public ApiResponseDto<UploadDto.UploadRes> fileChunkUpload(
|
||||
@RequestParam("uuid") UUID uuid,
|
||||
@RequestParam("fileName") String fileName,
|
||||
@RequestParam("fileSize") long fileSize,
|
||||
// @RequestParam("fileHash") String fileHash,
|
||||
@RequestParam("chunkIndex") Integer chunkIndex,
|
||||
@RequestParam("chunkTotalIndex") Integer chunkTotalIndex,
|
||||
@RequestPart("chunkFile") MultipartFile chunkFile) {
|
||||
@RequestParam("uuid") UUID uuid,
|
||||
@RequestParam("fileName") String fileName,
|
||||
@RequestParam("fileSize") long fileSize,
|
||||
// @RequestParam("fileHash") String fileHash,
|
||||
@RequestParam("chunkIndex") Integer chunkIndex,
|
||||
@RequestParam("chunkTotalIndex") Integer chunkTotalIndex,
|
||||
@RequestPart("chunkFile") MultipartFile chunkFile) {
|
||||
|
||||
String uploadDivi = "dataset";
|
||||
|
||||
@@ -102,7 +102,7 @@ public class UploadApiController {
|
||||
upAddReqDto.setFinalPath(datasetDir);
|
||||
upAddReqDto.setTempPath(datasetTmpDir);
|
||||
|
||||
System.out.println("uuid === "+ uuid);
|
||||
System.out.println("uuid === " + uuid);
|
||||
|
||||
return ApiResponseDto.ok(uploadService.uploadChunk(upAddReqDto, chunkFile));
|
||||
}
|
||||
@@ -116,8 +116,7 @@ public class UploadApiController {
|
||||
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||
})
|
||||
@PutMapping("/chunk-upload-complete/{uuid}")
|
||||
public ApiResponseDto<UploadDto.UploadRes> completeUpload(
|
||||
@PathVariable UUID uuid) {
|
||||
public ApiResponseDto<UploadDto.UploadRes> completeUpload(@PathVariable UUID uuid) {
|
||||
return ApiResponseDto.ok(uploadService.completeUpload(uuid));
|
||||
}
|
||||
|
||||
|
||||
@@ -74,8 +74,8 @@ public class UploadDto {
|
||||
private Integer chunkTotalIndex;
|
||||
|
||||
@Schema(
|
||||
description = "파일해쉬",
|
||||
example = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
||||
description = "파일해쉬",
|
||||
example = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
||||
private String fileHash;
|
||||
|
||||
@Schema(description = "uuid", example = "303d4e24-1726-4272-bbc7-01ab85692b80")
|
||||
@@ -153,7 +153,6 @@ public class UploadDto {
|
||||
@Schema(description = "파일명", example = "data.zip")
|
||||
private String fileName;
|
||||
|
||||
|
||||
@Schema(description = "파일 크기 (bytes)", example = "10737418240")
|
||||
private Long fileSize;
|
||||
|
||||
@@ -175,15 +174,13 @@ public class UploadDto {
|
||||
@Schema(description = "총 청크 Index", example = "100")
|
||||
private Integer chunkTotalIndex;
|
||||
|
||||
|
||||
@Schema(
|
||||
description = "파일해쉬",
|
||||
example = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
||||
description = "파일해쉬",
|
||||
example = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
||||
private String fileHash;
|
||||
|
||||
@Schema(description = "uuid")
|
||||
private UUID uuid;
|
||||
|
||||
}
|
||||
|
||||
@Schema(name = "UploadRes", description = "업로드 수행 후 리턴")
|
||||
@@ -204,13 +201,10 @@ public class UploadDto {
|
||||
if (this.chunkTotalIndex == 0) {
|
||||
return 0.0;
|
||||
}
|
||||
return (double) (this.chunkIndex+1) / (this.chunkTotalIndex+1) * 100.0;
|
||||
return (double) (this.chunkIndex + 1) / (this.chunkTotalIndex + 1) * 100.0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Schema(name = "DmlReturn", description = "수행 후 리턴")
|
||||
@Getter
|
||||
@Setter
|
||||
|
||||
@@ -59,17 +59,17 @@ public class UploadService {
|
||||
UploadDto.UploadRes upRes = new UploadDto.UploadRes();
|
||||
|
||||
long datasetId = 0;
|
||||
if( upAddReqDto.getDatasetId() != null )datasetId = upAddReqDto.getDatasetId();
|
||||
String uploadId = System.currentTimeMillis()+"";
|
||||
//UUID uuid = UUID.randomUUID();
|
||||
if (upAddReqDto.getDatasetId() != null) datasetId = upAddReqDto.getDatasetId();
|
||||
String uploadId = System.currentTimeMillis() + "";
|
||||
// UUID uuid = UUID.randomUUID();
|
||||
UUID uuid = upAddReqDto.getUuid();
|
||||
String tmpDataSetDir = upAddReqDto.getTempPath()+uuid;
|
||||
String fianlDir = upAddReqDto.getFinalPath()+uuid;
|
||||
String tmpDataSetDir = upAddReqDto.getTempPath() + uuid;
|
||||
String fianlDir = upAddReqDto.getFinalPath() + uuid;
|
||||
String uploadDivi = upAddReqDto.getUploadDivi();
|
||||
//String fileName = file.getOriginalFilename();
|
||||
// String fileName = file.getOriginalFilename();
|
||||
String fileName = upAddReqDto.getFileName();
|
||||
Integer chunkIndex = upAddReqDto.getChunkIndex();
|
||||
Integer chunkTotalIndex = upAddReqDto.getChunkTotalIndex();
|
||||
Integer chunkTotalIndex = upAddReqDto.getChunkTotalIndex();
|
||||
String status = FileUploadStatus.INIT.name();
|
||||
|
||||
upRes.setUuid(uuid);
|
||||
@@ -83,37 +83,33 @@ public class UploadService {
|
||||
upAddReqDto.setTempPath(tmpDataSetDir);
|
||||
upAddReqDto.setFinalPath(fianlDir);
|
||||
|
||||
//세션 신규,중복체크(초기화 포함)
|
||||
// 세션 신규,중복체크(초기화 포함)
|
||||
UploadDto.uploadDto dto = this.checkUploadSession(upAddReqDto, upRes);
|
||||
if( !upRes.getRes().equals("success") )return upRes;
|
||||
|
||||
if (!upRes.getRes().equals("success")) return upRes;
|
||||
|
||||
status = FileUploadStatus.UPLOADING.name();
|
||||
upAddReqDto.setStatus(status);
|
||||
|
||||
if( dto != null )
|
||||
{
|
||||
tmpDataSetDir = dto.getTempPath();
|
||||
if (dto != null) {
|
||||
tmpDataSetDir = dto.getTempPath();
|
||||
fianlDir = dto.getFinalPath();
|
||||
}
|
||||
|
||||
//폴더 생성 및 체크
|
||||
if( ! checkChunkFoler(upRes, tmpDataSetDir, fianlDir) )return upRes;
|
||||
// 폴더 생성 및 체크
|
||||
if (!checkChunkFoler(upRes, tmpDataSetDir, fianlDir)) return upRes;
|
||||
|
||||
//chunk저장하기
|
||||
if( ! FIleChecker.multipartChunkSaveTo(file, tmpDataSetDir, chunkIndex ) )
|
||||
{
|
||||
// chunk저장하기
|
||||
if (!FIleChecker.multipartChunkSaveTo(file, tmpDataSetDir, chunkIndex)) {
|
||||
upRes.setRes("fail");
|
||||
upRes.setResMsg("chunkIndex:"+chunkIndex+" 업로드 애러");
|
||||
upRes.setResMsg("chunkIndex:" + chunkIndex + " 업로드 애러");
|
||||
}
|
||||
|
||||
if( chunkIndex == chunkTotalIndex ) {
|
||||
if (chunkIndex == chunkTotalIndex) {
|
||||
|
||||
upAddReqDto.setUploadId(dto.getUploadId());
|
||||
upAddReqDto.setStatus(FileUploadStatus.DONE.name());
|
||||
uploadSessionCoreService.updateUploadSessionStatus(upAddReqDto);
|
||||
|
||||
|
||||
try {
|
||||
this.mergeChunks(tmpDataSetDir, fianlDir, fileName, chunkTotalIndex);
|
||||
|
||||
@@ -122,14 +118,11 @@ public class UploadService {
|
||||
uploadSessionCoreService.updateUploadSessionStatus(upAddReqDto);
|
||||
|
||||
} catch (IOException e) {
|
||||
//throw new RuntimeException(e);
|
||||
// throw new RuntimeException(e);
|
||||
upRes.setRes("fail");
|
||||
upRes.setResMsg("파일Chunk 병합(merge) 애러");
|
||||
return upRes;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
return upRes;
|
||||
@@ -149,7 +142,8 @@ public class UploadService {
|
||||
upRes.setChunkTotalIndex(dto.getChunkTotalIndex());
|
||||
|
||||
try {
|
||||
this.mergeChunks(dto.getTempPath(), dto.getFinalPath(), dto.getFileName(), dto.getChunkTotalIndex());
|
||||
this.mergeChunks(
|
||||
dto.getTempPath(), dto.getFinalPath(), dto.getFileName(), dto.getChunkTotalIndex());
|
||||
} catch (IOException e) {
|
||||
|
||||
upRes.setRes("fail");
|
||||
@@ -159,21 +153,17 @@ public class UploadService {
|
||||
}
|
||||
|
||||
return upRes;
|
||||
|
||||
}
|
||||
|
||||
public boolean checkChunkFoler(UploadDto.UploadRes upRes, String tmpDataSetDir, String fianlDir)
|
||||
{
|
||||
public boolean checkChunkFoler(UploadDto.UploadRes upRes, String tmpDataSetDir, String fianlDir) {
|
||||
|
||||
if( ! FIleChecker.mkDir(tmpDataSetDir) )
|
||||
{
|
||||
if (!FIleChecker.mkDir(tmpDataSetDir)) {
|
||||
upRes.setRes("fail");
|
||||
upRes.setRes("CHUNK 폴더 생성 ERROR");
|
||||
return false;
|
||||
}
|
||||
|
||||
if( ! FIleChecker.mkDir(fianlDir) )
|
||||
{
|
||||
if (!FIleChecker.mkDir(fianlDir)) {
|
||||
upRes.setRes("fail");
|
||||
upRes.setRes("업로드 완료 폴더 생성 ERROR");
|
||||
return false;
|
||||
@@ -182,28 +172,26 @@ public class UploadService {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public UploadDto.uploadDto checkUploadSession(UploadDto.UploadAddReq upAddReqDto, UploadDto.UploadRes upRes) {
|
||||
public UploadDto.uploadDto checkUploadSession(
|
||||
UploadDto.UploadAddReq upAddReqDto, UploadDto.UploadRes upRes) {
|
||||
|
||||
upRes.setRes("success");
|
||||
upRes.setResMsg("정상처리되었습니다.");
|
||||
|
||||
UploadDto.uploadDto dto = uploadSessionCoreService.findByUuid(upAddReqDto.getUuid());
|
||||
|
||||
if( upAddReqDto.getChunkIndex() == 0 ) {
|
||||
if( dto != null )
|
||||
{
|
||||
if (upAddReqDto.getChunkIndex() == 0) {
|
||||
if (dto != null) {
|
||||
upRes.setRes("duplicate");
|
||||
upRes.setResMsg("이미 진행중인 업로드세션입니다.");
|
||||
return dto;
|
||||
}
|
||||
|
||||
upAddReqDto.setStatus("UPLOADING");
|
||||
upRes.setUuid( upAddReqDto.getUuid() );
|
||||
upRes.setUuid(upAddReqDto.getUuid());
|
||||
uploadSessionCoreService.createUploadSession(upAddReqDto);
|
||||
}
|
||||
else {
|
||||
if( dto == null ){
|
||||
} else {
|
||||
if (dto == null) {
|
||||
upRes.setRes("nosession");
|
||||
upRes.setResMsg("업로드 세션이 존재하지 않습니다.");
|
||||
return dto;
|
||||
@@ -214,22 +202,22 @@ public class UploadService {
|
||||
uploadSessionCoreService.updateUploadSessionStatus(upAddReqDto);
|
||||
}
|
||||
|
||||
if( dto != null )upRes.setUuid( dto.getUuid() );
|
||||
if (dto != null) upRes.setUuid(dto.getUuid());
|
||||
|
||||
upRes.setChunkIndex(upAddReqDto.getChunkIndex());
|
||||
upRes.setChunkTotalIndex(upAddReqDto.getChunkTotalIndex());
|
||||
|
||||
|
||||
return dto;
|
||||
|
||||
}
|
||||
|
||||
public void mergeChunks(String tmpDir, String fianlDir, String fileName, int chunkTotalIndex) throws IOException {
|
||||
public void mergeChunks(String tmpDir, String fianlDir, String fileName, int chunkTotalIndex)
|
||||
throws IOException {
|
||||
|
||||
Path outputPath = Paths.get(fianlDir, fileName);
|
||||
try (FileChannel outChannel = FileChannel.open(outputPath, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
|
||||
try (FileChannel outChannel =
|
||||
FileChannel.open(outputPath, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
|
||||
for (int i = 0; i <= chunkTotalIndex; i++) {
|
||||
Path chunkPath = Paths.get(tmpDir, i+"");
|
||||
Path chunkPath = Paths.get(tmpDir, i + "");
|
||||
|
||||
try (FileChannel inChannel = FileChannel.open(chunkPath, StandardOpenOption.READ)) {
|
||||
long transferred = 0;
|
||||
@@ -243,10 +231,7 @@ public class UploadService {
|
||||
}
|
||||
}
|
||||
|
||||
//병합후 임시 폴더 삭제
|
||||
// 병합후 임시 폴더 삭제
|
||||
FIleChecker.deleteFolder(tmpDir);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user