refactor: API URL 처리 및 파일 미리보기 로직 개선
- next.config.mjs에서 API 프록시 설정을 Docker 환경에 맞게 수정하여, SERVER_API_URL을 사용하도록 변경했습니다. - InteractiveDataTable 및 TableListComponent에서 상대 경로 대신 getFilePreviewUrl 함수를 사용하여 전체 URL을 사용하도록 개선했습니다. - FileManagerModal 및 FileUploadComponent에서 Blob 다운로드 방식을 apiClient를 통해 통일하여 Docker 환경에서의 호환성을 높였습니다. - 불필요한 previewUrl 사용을 제거하고, 항상 apiClient를 통해 파일을 다운로드하도록 변경했습니다.
This commit is contained in:
@@ -3,7 +3,7 @@ import { Card, CardContent } from "@/components/ui/card";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Badge } from "@/components/ui/badge";
|
||||
import { toast } from "sonner";
|
||||
import { uploadFiles, downloadFile, deleteFile, getComponentFiles, getFileInfoByObjid } from "@/lib/api/file";
|
||||
import { uploadFiles, downloadFile, deleteFile, getComponentFiles, getFileInfoByObjid, getFilePreviewUrl } from "@/lib/api/file";
|
||||
import { GlobalFileManager } from "@/lib/api/globalFile";
|
||||
import { formatFileSize } from "@/lib/utils";
|
||||
import { apiClient } from "@/lib/api/client";
|
||||
@@ -205,9 +205,7 @@ const FileUploadComponent: React.FC<FileUploadComponentProps> = ({
|
||||
return;
|
||||
}
|
||||
|
||||
const previewUrl = `/api/files/preview/${objidStr}`;
|
||||
|
||||
// 🔑 실제 파일 정보 조회
|
||||
// 🔑 실제 파일 정보 조회 (previewUrl 제거 - apiClient blob 다운로드 방식으로 통일)
|
||||
(async () => {
|
||||
try {
|
||||
const fileInfoResponse = await getFileInfoByObjid(objidStr);
|
||||
@@ -220,15 +218,14 @@ const FileUploadComponent: React.FC<FileUploadComponentProps> = ({
|
||||
realFileName: realFileName,
|
||||
fileExt: fileExt,
|
||||
fileSize: fileSize,
|
||||
filePath: previewUrl,
|
||||
filePath: getFilePreviewUrl(objidStr),
|
||||
regdate: regdate,
|
||||
isImage: true,
|
||||
previewUrl: previewUrl,
|
||||
isRepresentative: isRepresentative,
|
||||
};
|
||||
|
||||
setUploadedFiles([fileInfo]);
|
||||
setRepresentativeImageUrl(previewUrl);
|
||||
// representativeImageUrl은 loadRepresentativeImage에서 blob으로 로드됨
|
||||
} else {
|
||||
// 파일 정보 조회 실패 시 최소 정보로 추가
|
||||
console.warn("🖼️ [FileUploadComponent] 파일 정보 조회 실패, 최소 정보 사용");
|
||||
@@ -237,14 +234,13 @@ const FileUploadComponent: React.FC<FileUploadComponentProps> = ({
|
||||
realFileName: `image_${objidStr}.jpg`,
|
||||
fileExt: '.jpg',
|
||||
fileSize: 0,
|
||||
filePath: previewUrl,
|
||||
filePath: getFilePreviewUrl(objidStr),
|
||||
regdate: new Date().toISOString(),
|
||||
isImage: true,
|
||||
previewUrl: previewUrl,
|
||||
};
|
||||
|
||||
setUploadedFiles([minimalFileInfo]);
|
||||
setRepresentativeImageUrl(previewUrl);
|
||||
// representativeImageUrl은 loadRepresentativeImage에서 blob으로 로드됨
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("🖼️ [FileUploadComponent] 파일 정보 조회 오류:", error);
|
||||
@@ -875,14 +871,8 @@ const FileUploadComponent: React.FC<FileUploadComponentProps> = ({
|
||||
return;
|
||||
}
|
||||
|
||||
// 🔑 이미 previewUrl이 설정된 경우 바로 사용 (API 호출 스킵)
|
||||
if (file.previewUrl) {
|
||||
setRepresentativeImageUrl(file.previewUrl);
|
||||
return;
|
||||
}
|
||||
|
||||
// API 클라이언트를 통해 Blob으로 다운로드 (인증 토큰 포함)
|
||||
// 🔑 download 대신 preview 사용 (공개 접근)
|
||||
// 🔑 previewUrl 상대 경로 대신 apiClient를 사용하여 Docker 환경에서도 정상 동작
|
||||
const response = await apiClient.get(`/files/preview/${file.objid}`, {
|
||||
params: {
|
||||
serverFilename: file.savedFileName,
|
||||
|
||||
Reference in New Issue
Block a user