Skip to content

Commit 72af2ab

Browse files
committed
fix: 파일 업로드 버튼이 동작하지 않던 문제 수정
1 parent 4fc867e commit 72af2ab

File tree

1 file changed

+35
-3
lines changed
  • apps/pyconkr-admin/src/components/pages/file

1 file changed

+35
-3
lines changed

apps/pyconkr-admin/src/components/pages/file/upload.tsx

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ const InnerPublicFileUploadPage: React.FC = () => {
4141
[]
4242
);
4343

44-
const onFileSelectButtonClick: React.MouseEventHandler = (event) => {
45-
ignoreEvent(event);
44+
const onFileSelectButtonClick: React.MouseEventHandler = () => {
4645
if (fileInputRef.current) {
4746
fileInputRef.current.click();
4847
} else {
@@ -100,6 +99,39 @@ const InnerPublicFileUploadPage: React.FC = () => {
10099
[forceRerender]
101100
);
102101

102+
const resetFileSelect = React.useCallback(() => {
103+
if (fileInputRef.current) {
104+
fileInputRef.current.value = ""; // 파일 선택 초기화
105+
fileInputRef.current.files = null; // 파일 목록 초기화
106+
forceRerender();
107+
}
108+
}, [forceRerender]);
109+
110+
const onFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {
111+
ignoreEvent(e);
112+
setState((prev) => ({ ...prev, isMouseOnDragBox: false }));
113+
114+
const files = e.target.files;
115+
if (!files || files.length === 0) {
116+
addSnackbar("파일을 선택하지 않았습니다.", "error");
117+
resetFileSelect();
118+
return;
119+
}
120+
121+
const file = files[0];
122+
if (file.size === 0) {
123+
addSnackbar("선택한 파일의 크기가 0입니다.", "error");
124+
resetFileSelect();
125+
return;
126+
} else if (!(file.type.startsWith("image/") || file.type === "application/json")) {
127+
addSnackbar("이미지 또는 JSON 파일만 업로드가 가능합니다.", "error");
128+
resetFileSelect();
129+
return;
130+
}
131+
132+
handleFile(file);
133+
};
134+
103135
const onClipboardPaste = React.useCallback(
104136
(event: DocumentEventMap["paste"]) => {
105137
ignoreEvent(event);
@@ -167,7 +199,7 @@ const InnerPublicFileUploadPage: React.FC = () => {
167199
<Typography variant="h5" gutterBottom>
168200
File &gt; PublicFile &gt; 새 파일 업로드
169201
</Typography>
170-
<Input inputRef={fileInputRef} type="file" name="file" sx={{ display: "none" }} />
202+
<Input inputRef={fileInputRef} onChange={onFileSelect} type="file" name="file" sx={{ display: "none" }} />
171203
<Button variant="outlined" onClick={onFileSelectButtonClick} startIcon={<PermMedia />}>
172204
파일 선택
173205
</Button>

0 commit comments

Comments
 (0)