728x90
반응형
1. 설치
$npm install --save multer
2. multer 가져오기 ( 조건문에 따라 파일의 로컬 저장 위치를 변환시킬 수 있음)
const fs = require("fs");
const bodyParser = require("body-parser");
const path = require("path");
router.use("/image_file", express.static("./upload")); // 사용자가 접근할 수 있게 공유
const multer = require("multer");
const uploadCustomer = multer({
storage: multer.diskStorage({
destination(req, file, cb) {
if (!fs.existsSync("../client/public/upload")) {
fs.mkdirSync("../client/public/upload");
}
if (!fs.existsSync("../client/public/upload/customer")) {
fs.mkdirSync("../client/public/upload/customer");
}
if (!fs.existsSync("../client/public/upload/customer/" + file.originalname.split('-')[0])) { // 경로가 존재하지 않을 때
fs.mkdirSync("../client/public/upload/customer/" + file.originalname.split('-')[0]);
} else {
fs.rmdirSync("../client/public/upload/customer/" + file.originalname.split('-')[0], { recursive: true, force: true }); // 기존폴더 및 하위 자료 삭제
fs.mkdirSync("../client/public/upload/customer/" + file.originalname.split('-')[0]); // 폴더 생성
}
cb(null, "../client/public/upload/customer/" + file.originalname.split('-')[0]); // 이미지 생성
},
filename(req, file, cb) {
const ext = path.extname(file.originalname);
cb(null, file.originalname.split('-')[1]);
},
}),
limits: { fileSize: 5 * 1024 * 1024 },
});
3. upload.single()
router.post('/', upload.single('image'), (req, res) => {
console.log(req.file);
// 클라이언트에서 넘어온 파일에 대한 정보가 req.file에 FILE 객체로 저장되어 있습니다.
})
출처: https://juhi.tistory.com/10 [주하히의 기술 블로그]
4. upload.array()
router.post('/', upload.array('photos', 4), (req, res) => {
console.log(req.files);
console.log(req.files[0]); // 파일의 인덱스로 접근
// 위 single에서와 다르게 req.file이 아닌 req.files에로 넘어옵니다.
})
출처: https://juhi.tistory.com/10 [주하히의 기술 블로그]
// 미발송 근로계약서 이미지 및 서명, 데이터 요청
router.post("/sendLabor", uploadCustomer.array("image_file"), function (req, res, next) {
const laborCode = req.body.laborCode;
const state = JSON.parse(req.body.state);
const 기타입력정보 = state.기타입력정보;
const 근로자동의 = state.근로자동의;
const 메인서명 = state.메인서명;
console.log("req : ", req.files);
const update_column = [
"기타입력정보=JSON_OBJECT('근무장소', '" + 기타입력정보.근무장소 + "','담당업무', '" + 기타입력정보.담당업무 + "','주휴요일', '" + 기타입력정보.주휴요일 + "')",
"근로자동의=JSON_OBJECT('동의여부_1', '" + 근로자동의.동의여부_1 + "','동의여부_2', '" + 근로자동의.동의여부_2 + "','동의여부_3', '" + 근로자동의.동의여부_3 + "','동의여부_4', '" + 근로자동의.동의여부_4 + "','동의여부_5', '" + 근로자동의.동의여부_5 + "','동의여부_6', '" + 근로자동의.동의여부_6 + "','동의여부_7', '" + 근로자동의.동의여부_7 + "','동의여부_8', '" + 근로자동의.동의여부_8 + "')",
"메인서명=JSON_OBJECT('근로계약서_동의', '" + 메인서명.근로계약서_동의 + "','개인정보_동의', '" + 메인서명.개인정보_동의 + "','사용자_서명', '" + 메인서명.사용자_서명 + "', '근로자_서명', '" + 메인서명.근로자_서명 + "','사용자_서명날짜', '" + 메인서명.사용자_서명날짜 + "','근로자_서명날짜', '" + 메인서명.근로자_서명날짜 + "','사용자서명경로', '" + 'upload/customer/' + laborCode + '/' + "customer.png" + "','근로자서명경로', '" + 메인서명.근로자서명경로 + "')",
]
console.log(update_column);
const update_data_query = "UPDATE LABOR SET " + update_column + " WHERE labor_code ='" + laborCode + "'";
db.sequelize.query(
update_data_query,
{
type: QueryTypes.UPDATE
}
).then((result) => {
return res.send({ success: true, result });
})
})
5. upload.fields()
router.post('/',
upload.fields([
{ name: 'mainImage', maxCount: 1 },
{ name: 'subImages', maxCount: 5 } ]),
(req, res) => {
console.log(req.files);
console.log(req.files['접근하려는 fieldname']);
})
출처: https://juhi.tistory.com/10 [주하히의 기술 블로그]
728x90
반응형
'Back-End > Node.js' 카테고리의 다른 글
Node.js | Multer 를 이용한 AWS S3 파일 업로드 구현(2) (0) | 2022.04.27 |
---|---|
Node.js | Multer 를 이용한 AWS S3 파일 업로드 구현(1) (2) | 2022.04.26 |
Node.js | 웹, 웹앱에서 핸드폰 기능 (ex 전화걸기, 문자보내기) (0) | 2022.04.25 |
puppeteer 를 이용한 웹 크롤링 (0) | 2022.04.11 |
Node.js | Base64 인코딩, 디코딩 하는법 (0) | 2022.03.30 |