
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import { fileClient } from '@/resources/api/index';
import uploadProgressStore from '@/resources/js/uploadProgressStore';
// 파일 업로드를 처리하는 서비스
const uploadService = {
// POST 메서드를 사용한 업로드 (등록)
async uploadWithPost(url, formData, options = {}) {
// 파일 정보 추출
const file = formData.get('multipartFiles') || formData.get('file');
if (file) {
// 업로드 상태 초기화 및 파일 전송 단계 시작 (이 초기화는 유지)
uploadProgressStore.startUpload(file.name, 1);
}
try {
// 1단계: 파일 전송 단계
uploadProgressStore.setStage('uploading');
// fileClient.post를 사용하여 업로드 요청
const response = await fileClient.post(url, formData, {
...options,
onUploadProgress: (progressEvent) => {
// 진행 상태 업데이트
uploadProgressStore.updateProgress(progressEvent.loaded, progressEvent.total);
// 사용자 정의 onUploadProgress 콜백이 있으면 호출
if (options.onUploadProgress) {
options.onUploadProgress(progressEvent);
}
// 업로드가 완료되면 처리 중 단계로 전환
if (progressEvent.loaded === progressEvent.total) {
// setTimeout을 사용하여 처리 단계 전환을 강제로 비동기 실행
setTimeout(() => {
uploadProgressStore.setStage('processing');
}, 100);
}
}
});
// 서버 응답 수신 - 처리 완료 표시
uploadProgressStore.completeProcessing();
// 잠시 후 응답 반환 (처리 완료 상태를 보여줄 시간 제공)
await new Promise(resolve => setTimeout(resolve, 500));
// 응답 반환 (alert은 API 함수에서 처리)
return response;
} catch (error) {
// 오류 발생 시 상태 초기화
uploadProgressStore.handleError();
throw error; // 오류 다시 throw
}
},
// PUT 메서드를 사용한 업로드 (수정)
async uploadWithPut(url, formData, options = {}) {
// 파일 정보 추출
const file = formData.get('multipartFiles') || formData.get('file');
if (file) {
// 업로드 상태 초기화 및 파일 전송 단계 시작 (이 초기화는 유지)
uploadProgressStore.startUpload(file.name, 1);
}
try {
// 1단계: 파일 전송 단계
uploadProgressStore.setStage('uploading');
// fileClient.put을 사용하여 업로드 요청
const response = await fileClient.put(url, formData, {
...options,
onUploadProgress: (progressEvent) => {
// 진행 상태 업데이트
uploadProgressStore.updateProgress(progressEvent.loaded, progressEvent.total);
// 사용자 정의 onUploadProgress 콜백이 있으면 호출
if (options.onUploadProgress) {
options.onUploadProgress(progressEvent);
}
// 업로드가 완료되면 처리 중 단계로 전환
if (progressEvent.loaded === progressEvent.total) {
// setTimeout을 사용하여 처리 단계 전환을 강제로 비동기 실행
setTimeout(() => {
uploadProgressStore.setStage('processing');
}, 100);
}
}
});
// 서버 응답 수신 - 처리 완료 표시
uploadProgressStore.completeProcessing();
// 잠시 후 응답 반환 (처리 완료 상태를 보여줄 시간 제공)
await new Promise(resolve => setTimeout(resolve, 500));
// 응답 반환 (alert은 API 함수에서 처리)
return response;
} catch (error) {
// 오류 발생 시 상태 초기화
uploadProgressStore.handleError();
throw error; // 오류 다시 throw
}
}
};
export default uploadService;