@@ -10,14 +10,13 @@ public interface FileUploadService {
|
|||||||
FileUploadSession initUpload(Long userId, String fileName,
|
FileUploadSession initUpload(Long userId, String fileName,
|
||||||
String fileType, String extension, long fileSize);
|
String fileType, String extension, long fileSize);
|
||||||
|
|
||||||
UploadProgressResponse uploadChunk(String uploadId, Integer chunkNumber,
|
|
||||||
MultipartFile chunkFile) throws IOException;
|
|
||||||
|
|
||||||
UploadProgressResponse getUploadProgress(String uploadId);
|
|
||||||
|
|
||||||
void handleExpiredSession(FileUploadSession session);
|
void handleExpiredSession(FileUploadSession session);
|
||||||
|
|
||||||
void cancelUpload(String uploadId);
|
void cancelUpload(String uploadId);
|
||||||
|
|
||||||
|
void uploadChunk(String uploadId, Integer chunkNumber, MultipartFile chunkFile);
|
||||||
|
|
||||||
|
UploadProgressResponse getUploadProgress(String uploadId);
|
||||||
|
|
||||||
void completeFileProcessingAsync(FileUploadSession session);
|
void completeFileProcessingAsync(FileUploadSession session);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -149,8 +149,36 @@ public class FileUploadServiceImpl implements FileUploadService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public UploadProgressResponse uploadChunk(String uploadId, Integer chunkNumber,
|
public void handleExpiredSession(FileUploadSession session) {
|
||||||
MultipartFile chunkFile) {
|
session.setStatus(UploadStatus.FAILED);
|
||||||
|
session.setLastError("Upload session expired");
|
||||||
|
sessionRepository.save(session);
|
||||||
|
|
||||||
|
CompletableFuture.runAsync(() -> cleanupSessionFiles(session));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void cancelUpload(String uploadId) {
|
||||||
|
FileUploadSession session = sessionRepository.findById(uploadId)
|
||||||
|
.orElseThrow(() -> new UploadSessionNotFoundException(uploadId));
|
||||||
|
|
||||||
|
if (session.getStatus() == UploadStatus.COMPLETED || session.getStatus() == UploadStatus.CANCELLED) {
|
||||||
|
throw new FileUploadException("Cannot cancel completed or cancelled upload");
|
||||||
|
}
|
||||||
|
|
||||||
|
session.setStatus(UploadStatus.CANCELLED);
|
||||||
|
sessionRepository.save(session);
|
||||||
|
|
||||||
|
CompletableFuture.runAsync(() -> cleanupSessionFiles(session));
|
||||||
|
|
||||||
|
log.info("Upload cancelled: {}", uploadId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void uploadChunk(String uploadId, Integer chunkNumber,
|
||||||
|
MultipartFile chunkFile) {
|
||||||
FileUploadSession session = sessionRepository.findById(uploadId)
|
FileUploadSession session = sessionRepository.findById(uploadId)
|
||||||
.orElseThrow(() -> new UploadSessionNotFoundException(uploadId));
|
.orElseThrow(() -> new UploadSessionNotFoundException(uploadId));
|
||||||
|
|
||||||
@@ -176,52 +204,7 @@ public class FileUploadServiceImpl implements FileUploadService {
|
|||||||
throw new ChunkSizeExceededException(chunkFile.getSize(), chunkSize);
|
throw new ChunkSizeExceededException(chunkFile.getSize(), chunkSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
return processChunk(session, chunkNumber, chunkFile);
|
processChunk(session, chunkNumber, chunkFile);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public void handleExpiredSession(FileUploadSession session) {
|
|
||||||
session.setStatus(UploadStatus.FAILED);
|
|
||||||
session.setLastError("Upload session expired");
|
|
||||||
sessionRepository.save(session);
|
|
||||||
|
|
||||||
CompletableFuture.runAsync(() -> cleanupSessionFiles(session));
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Async("fileUploadTaskExecutor")
|
|
||||||
// @Transactional
|
|
||||||
// public void assembleFileAsync(FileUploadSession session) throws DuplicateImageException {
|
|
||||||
// try {
|
|
||||||
// assembleFile(session);
|
|
||||||
// log.info("File assembly completed successfully for session: {}",
|
|
||||||
// session.getUploadId());
|
|
||||||
// } catch (DuplicateImageException e) {
|
|
||||||
// throw new DuplicateImageException("DUBL", e.duplicateFileId(), e.userId());
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// log.error("Failed to assemble file for session {}: {}",
|
|
||||||
// session.getUploadId(), e.getMessage(), e);
|
|
||||||
//
|
|
||||||
// handleAssemblyFailure(session, e);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public void cancelUpload(String uploadId) {
|
|
||||||
FileUploadSession session = sessionRepository.findById(uploadId)
|
|
||||||
.orElseThrow(() -> new UploadSessionNotFoundException(uploadId));
|
|
||||||
|
|
||||||
if (session.getStatus() == UploadStatus.COMPLETED || session.getStatus() == UploadStatus.CANCELLED) {
|
|
||||||
throw new FileUploadException("Cannot cancel completed or cancelled upload");
|
|
||||||
}
|
|
||||||
|
|
||||||
session.setStatus(UploadStatus.CANCELLED);
|
|
||||||
sessionRepository.save(session);
|
|
||||||
|
|
||||||
CompletableFuture.runAsync(() -> cleanupSessionFiles(session));
|
|
||||||
|
|
||||||
log.info("Upload cancelled: {}", uploadId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user