파일 업로드 기능 구현 및 상세설정 연동

- 템플릿 파일첨부 컴포넌트와 FileComponentConfigPanel 실시간 동기화
- FileUpload 위젯에 전역 파일 상태 관리 기능 추가
- 파일 업로드/삭제 시 전역 상태 및 localStorage 동기화
- RealtimePreview에서 전역 상태 우선 읽기 및 파일 개수 표시
- 한컴오피스, Apple iWork 파일 형식 지원 추가
- 파일 뷰어 모달 및 미리보기 기능 구현
- 업로드된 파일 디렉토리 .gitignore 추가
This commit is contained in:
leeheejin
2025-09-26 13:11:34 +09:00
parent c28e27f3e8
commit ee7c8e989e
20 changed files with 2661 additions and 503 deletions

View File

@@ -27,13 +27,43 @@ export interface FileDownloadParams {
/**
* 파일 업로드
*/
export const uploadFiles = async (files: FileList): Promise<FileUploadResponse> => {
export const uploadFiles = async (params: {
files: FileList | File[];
tableName?: string;
fieldName?: string;
recordId?: string;
docType?: string;
docTypeName?: string;
targetObjid?: string;
parentTargetObjid?: string;
linkedTable?: string;
linkedField?: string;
autoLink?: boolean;
columnName?: string;
isVirtualFileColumn?: boolean;
}): Promise<FileUploadResponse> => {
const formData = new FormData();
Array.from(files).forEach((file) => {
// 파일 추가
const fileArray = Array.isArray(params.files) ? params.files : Array.from(params.files);
fileArray.forEach((file) => {
formData.append("files", file);
});
// 추가 파라미터들 추가
if (params.tableName) formData.append("tableName", params.tableName);
if (params.fieldName) formData.append("fieldName", params.fieldName);
if (params.recordId) formData.append("recordId", params.recordId);
if (params.docType) formData.append("docType", params.docType);
if (params.docTypeName) formData.append("docTypeName", params.docTypeName);
if (params.targetObjid) formData.append("targetObjid", params.targetObjid);
if (params.parentTargetObjid) formData.append("parentTargetObjid", params.parentTargetObjid);
if (params.linkedTable) formData.append("linkedTable", params.linkedTable);
if (params.linkedField) formData.append("linkedField", params.linkedField);
if (params.autoLink !== undefined) formData.append("autoLink", params.autoLink.toString());
if (params.columnName) formData.append("columnName", params.columnName);
if (params.isVirtualFileColumn !== undefined) formData.append("isVirtualFileColumn", params.isVirtualFileColumn.toString());
const response = await apiClient.post("/files/upload", formData, {
headers: {
"Content-Type": undefined, // axios가 자동으로 multipart/form-data를 설정하도록