|
|
@ -1,4 +1,4 @@
|
|
|
|
import { useMemo, useRef, useState } from 'react';
|
|
|
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
|
|
|
|
|
|
|
|
|
|
// material-ui
|
|
|
|
// material-ui
|
|
|
|
import { Button, Grid, IconButton, Input, InputAdornment, TextField, Tooltip } from '@mui/material';
|
|
|
|
import { Button, Grid, IconButton, Input, InputAdornment, TextField, Tooltip } from '@mui/material';
|
|
|
@ -16,6 +16,7 @@ import * as React from 'react';
|
|
|
|
|
|
|
|
|
|
|
|
import axios from 'axios';
|
|
|
|
import axios from 'axios';
|
|
|
|
import { FileDownload, FileUpload } from '@mui/icons-material';
|
|
|
|
import { FileDownload, FileUpload } from '@mui/icons-material';
|
|
|
|
|
|
|
|
import FileSaver from 'file-saver';
|
|
|
|
|
|
|
|
|
|
|
|
const PublicBoardForm = (props) => {
|
|
|
|
const PublicBoardForm = (props) => {
|
|
|
|
console.log(props);
|
|
|
|
console.log(props);
|
|
|
@ -24,6 +25,7 @@ const PublicBoardForm = (props) => {
|
|
|
|
const [contents, setContents] = useState(inContents);
|
|
|
|
const [contents, setContents] = useState(inContents);
|
|
|
|
const [filesInfo, setFilesInfo] = useState(null);
|
|
|
|
const [filesInfo, setFilesInfo] = useState(null);
|
|
|
|
const [selectedFile, setSelectedFile] = useState(inFilename); // 파일
|
|
|
|
const [selectedFile, setSelectedFile] = useState(inFilename); // 파일
|
|
|
|
|
|
|
|
const [fileData, setFileData] = useState(null);
|
|
|
|
|
|
|
|
|
|
|
|
const onList = (e) => {
|
|
|
|
const onList = (e) => {
|
|
|
|
setOpen(false);
|
|
|
|
setOpen(false);
|
|
|
@ -116,9 +118,49 @@ const PublicBoardForm = (props) => {
|
|
|
|
setFilesInfo(e.target.files);
|
|
|
|
setFilesInfo(e.target.files);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handleFileDownload = (e) => {
|
|
|
|
const handleFileDownload = () => setFileData(opstBizService.fileDownload(inCode));
|
|
|
|
opstBizService.fileDownload(inCode);
|
|
|
|
|
|
|
|
};
|
|
|
|
//TODO: 헤더에서 설정한 파일명을 직접 읽어 설정할 수 있도록 변경 필요 : 임시로 파일명 필드 이름을 사용하도록 하였음
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
|
|
if (fileData) {
|
|
|
|
|
|
|
|
// const contentDisposition = fileData.headers['Content-Disposition']; // 파일 이름
|
|
|
|
|
|
|
|
// const fileName = 'unknown';
|
|
|
|
|
|
|
|
// if (contentDisposition) {
|
|
|
|
|
|
|
|
// const [fileNameMatch] = contentDisposition.split(';').filter((str) => str.includes('filename'));
|
|
|
|
|
|
|
|
// if (fileNameMatch) [, fileName] = fileNameMatch.split('=');
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// fileName = JSON.stringify(fileData.headers).split('filename=')[1].split('",')[0];
|
|
|
|
|
|
|
|
FileSaver.saveAs(new Blob([fileData.data]), selectedFile);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
if (fileData) {
|
|
|
|
|
|
|
|
// const contentDisposition = fileData.headers['Content-Disposition']; // 파일 이름
|
|
|
|
|
|
|
|
const fileName = 'unknown';
|
|
|
|
|
|
|
|
// if (contentDisposition) {
|
|
|
|
|
|
|
|
// const [fileNameMatch] = contentDisposition.split(';').filter((str) => str.includes('filename'));
|
|
|
|
|
|
|
|
// if (fileNameMatch) [, fileName] = fileNameMatch.split('=');
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// fileName = JSON.stringify(fileData.headers).split('filename=')[1].split('",')[0];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const url = window.URL.createObjectURL(new Blob([fileData.data]));
|
|
|
|
|
|
|
|
const link = document.createElement('a');
|
|
|
|
|
|
|
|
link.href = url;
|
|
|
|
|
|
|
|
link.setAttribute('download', fileName);
|
|
|
|
|
|
|
|
link.style.cssText = 'display:none';
|
|
|
|
|
|
|
|
link.setAttribute('id', 'tempLink');
|
|
|
|
|
|
|
|
document.body.appendChild(link);
|
|
|
|
|
|
|
|
link.click();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return () => {
|
|
|
|
|
|
|
|
const link = document.querySelector('#tempLink');
|
|
|
|
|
|
|
|
// eslint-disable-next-line no-unused-expressions
|
|
|
|
|
|
|
|
link && link.remove();
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
}, [fileData]);
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
<>
|
|
|
|
<Grid container spacing={2}>
|
|
|
|
<Grid container spacing={2}>
|
|
|
|