Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ESP8266
- 프로젝트초기설정
- aspect-ratio
- 백준풀이
- ESP-01WiFi
- dp문제
- 이친수문제
- 백준자바
- 연결리스트
- reactNative
- ESP-01
- 백준
- 백준java
- 노마드코더
- 리액트네이티브
- scss
- 포인터
- scroll-snap
- CSS Flex
- 백준15988풀이
- peap
- 2193
- ESP8266WiFi
- C
- 백준 #백준2661 #좋은수열 #Java #코딩
- CSS
- Flexible box
- @supports
- 아두이노 우노
- 백준문제풀이 #백준 #백준문제 #스타트택시
Archives
- Today
- Total
코딩 농장
[Node.js/React/multer] multer로 파일 업로드 기능 만들기 본문
728x90
웹 파일 매니저를 구현중이다.
우선 프론트를 구성한다.
나는 react-dropzone을 이용하여 프론트를 만들었다.
npm install react-dropzone
const Workspace = () => {
const {getInputProps, open, acceptedFiles} = useDropzone({noDrag: true});
const [files, setFiles] = useState(null);
const config = {
headers: {'content-type' : 'multipart/formdata'}
};
useEffect(() => {
console.log(acceptedFiles);
const datas = acceptedFiles.map(file => {
let formdata = new FormData;
formdata.append("file", file);
console.log(file);
axios
.post('/api/file/upload', formdata, config)
.then( res => {
console.log(res);
setFiles(datas);
})
.catch(err => {
console.log(err);
});
return(
<li key={file.path}>
{file.path} - {file.size} bytes
</li>
)});
}, [acceptedFiles])
return(
<div>
<Header />
<div className={style.workBody}>
<div>
<input {...getInputProps()} type="file" />
<button type="button" class="btn btn-outline-primary" onClick={open}>Upload</button>
</div>
<aside>
<h4>Files</h4>
<ul>{files}</ul>
</aside>
</div>
<Chat />
</div>
)};
useEffect를 사용하지 않으면 dropzone을 클릭할때마다 api 요청이 실행된다.
multer는 form data로 multipart/formdata만 받는다고 함. 그래서 그렇게 보내도록 설정했다.
이제 업로드하는 api를 만들어야한다.
https://github.com/expressjs/multer/blob/master/doc/README-ko.md
GitHub - expressjs/multer: Node.js middleware for handling `multipart/form-data`.
Node.js middleware for handling `multipart/form-data`. - GitHub - expressjs/multer: Node.js middleware for handling `multipart/form-data`.
github.com
multer의 공식 문서 참고
npm install --save multer
먼저 multer를 깔고 위에 프론트에서 적은 POST api/file/upload를 채워주자.
const multer = require('multer');
let storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, __dirname+"/uploads/");
},
filename: (req, file, cb) => {
cb(null, `${file.originalname}`);
}
});
const upload = multer({ storage: storage }).any();
router.post('/upload', async (req, res, next) => {
upload(req, res, err => {
if(err) return res.json({ success: false, err })
return res.json({ success: true })
})
});
이 파일이 있는 폴더 내의 uploads 라는 폴더 내에 내가 업로드한 파일이 저장된다.
'웹' 카테고리의 다른 글
[Redux] 내가 이해한 Redux의 흐름 (0) | 2021.09.26 |
---|---|
[CSS] 최신 CSS 써보자(feat.노마드코더) / @supports / scroll snap / gap / aspect-ratio (0) | 2021.09.18 |
Comments