프론트
<Form.Control
type="file"
className="shadow-none"
accept="image/*"
onChange={(e) => {
FileUpload(e);
}}></Form.Control>
form 을 작성한다 input type은 file , accept 는 'image/*' (이미지 업로드 허용한다는 뜻임) audio,나 video도 가능함
const FileUpload = (e) => {
console.log(e.target.files);
}
change 이벤트로 e.target.files 찍어보면
서버
import express from "express";
import { upload } from "../controller/uploadController.js";
const router = express.Router();
router.post("/", upload);
export default router;
post 요청
server.use("/uploads", express.static("uploads"));
uploads 폴더만들고 정적인폴더는 static을 사용한다(이폴더에 이미지 저장예정)
npm i multer
https://www.npmjs.com/package/multer?activeTab=readme
multer
Middleware for handling `multipart/form-data`.. Latest version: 1.4.5-lts.1, last published: a year ago. Start using multer in your project by running `npm i multer`. There are 4003 other projects in the npm registry using multer.
www.npmjs.com
multer 라이브러리 설치
import multer from "multer";
// multer 라이브러리를 이용한 파일업로드
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "uploads/");
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
cb(null, uniqueSuffix + "_" + file.originalname); //file.originalname 가 뒤편에 오게끔 수정
},
});
const fupload = multer({ storage: storage }).single("file"); //변수명 임의로 지정
export function upload(req, res) {
fupload(req, res, (err) => {
if (err) {
console.log(err);
} else {
console.log(res.req.file.path);
res.json(res.req.file.path);
}
});
}
프론트
const handleSubmit = (e) => {
e.preventDefault();
const formData = new FormData(e.target);
const formDataObject = {};
formData.forEach((val, key) => {
formDataObject[key] = val;
});
alert(JSON.stringify(formDataObject));
//post --> axios
axios({
method: "post",
url: "http://127.0.0.1:8000/products/new/",
data: formDataObject,
})
.then((result) => {
if (result.data === "ok") {
alert("새로운 제품이 등록되었습니다.");
}
})
.catch((error) => {
console.log("요청실패");
console.log(error);
});
};
'프로그래밍 > NodeJS' 카테고리의 다른 글
multer로 이미지 업로드하기 (0) | 2024.02.29 |
---|---|
2023.11.29+ node js 게시판 연습 (my sql,react) 게시글 post (0) | 2023.11.29 |
NodeJS React환경에서 로그인 기능(쿠키) 구현하기 (5) | 2023.11.17 |
aws s3 이미지 업로드 (0) | 2023.11.15 |
spa로 페이지 구성하기 (0) | 2023.10.30 |