로컬에 있는 파일을 웹서버에 업로드하는 방법을 알아보겠습니다. 이때 필요한 미들웨어가 「multer」 입니다.
npm install multer
import multer from 'multer';
const upload = multer({dest: 'files/', 옵션});
| 옵션 | 내용 |
|---|---|
| dest 또는 storage | 파일이 저장될 위치 |
| fileFilter | 어떤 파일을 허용할 지 제어하는 함수 |
| limits | 업로드 될 데이터의 한도 |
| preservePath | 파일의 base name 대신 보존할 파일의 전체 경로 |
import path from 'path';
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "tmp/my-uploads");
},
filename: (req, file, cb) => {
const ext = path.extname(file.originalname);
cb(null, file.fieldname + '-' + Date.now() + ext);
}
});
const upload = multer({ storage });
<form action='/' method="POST" enctype="multipart/form-data">
<input type="text" name="user" />
<input type="file" accept=".pdf" name="pdfFile" />
<input type="submit" />
</form>
router.post('/', UPLOAD.single("pdfFile"), (req, res) => {
console.log(req.body.user);
console.log(req.file);
});
<form action='/' method="POST" enctype="multipart/form-data">
<input type="file" name="anyFiles" multiple />
<input type="submit" />
</form>
router.post('/', upload.array("anyFiles"), (req, res) => {
console.log(req.files);
});
<form action='/' method="POST" enctype="multipart/form-data">
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="submit" />
</form>
const fileFields = upload.fields([
{name: "file1"},
{name: "file2"}
]);
router.post('/', fileFields, (req, res) => {
console.log(req.files);
});
<form action='/' method="POST" enctype="multipart/form-data">
<input type="file" name="single" />
<input type="file" name="multi" multiple />
<input type="submit" />
</form>
const fileFields = upload.fields([
{name: "single"},
{name: "multi"}
]);
router.post('/', fileFields, (req, res) => {
console.log(req.files);
});
const fileFields = upload.fields([
{name: "single"},
{name: "multi", maxCount: 3}
]);