やりたいこと

1つのformタグから複数画像をアップロード

 

myprofileEdit.ejs

<form action="/myprofile_img" method="post" enctype="multipart/form-data">
プロフィール写真の変更<input type="file" name="account_img"><br>
店舗詳細写真の変更 <input type="file" name="shop_img"><br>
店舗画像1<input type="file" name="img1"><br>
店舗画像2<input type="file" name="img2"><br>
<input type="submit" value="送信">
</form>

 

myprofile_img.js

const express = require('express');
const router = express.Router();
const connection = require('../mysqlConnection');
const multer = require('multer');//画像取得ようパッケージ(multer)読み込み
const moment = require('moment');//日付取得用パッケージ読み込み

const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './public/images/uploads')
},
filename: function (req, file, cb) {
cb(null, Date.now() + '-' + Math.round(Math.random() * 1E9)+file.originalname)
}
})
// const upload = multer({ dest: './public/images/uploads' })//ファイルの保存先指定
const upload = multer({ storage: storage })

const path = require('path')

router.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'views/myprofile.ejs'))
}) ;

var cpUpload = upload.fields([{
name:'account_img', maxCount:1
},{
name:'shop_img', maxCount:1
},{
name:'img1', maxCount:1
},{
name:'img2', maxCount:1
}
]);


//送信する画像が1つの時第二引数は 「upload.single('account_img')」を使う
router.post('/', cpUpload, function (req, res, next) {
 
console.log('req.filesここからここからここからここからここからここから')
console.log(req.files)
console.log("req.files000000000000000000000000000000")
console.log(req.files.account_img)//ok
console.log(req.files.account_img[0])//ok
console.log(req.files.account_img[0].filename)//1599803609347-263008020image.png
// res.redirect('/myprofile')

})

module.exports = router;


これでアップロードしたファイルの名前を取得するために検証を以下で進める

 

console.log(req.files)
 

この値をターミナルでみると


[Object: null prototype] {
account_img: [
{
fieldname: 'account_img',
originalname: 'image.png',
encoding: '7bit',
mimetype: 'image/png',
destination: './public/images/uploads',
filename: '1599803609347-263008020image.png',
path: 'public/images/uploads/1599803609347-263008020image.png',
size: 1249386
}
],
shop_img: [
{
fieldname: 'shop_img',
originalname: 'images (44).jpeg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './public/images/uploads',
filename: '1599803609356-110568068images (44).jpeg',
path: 'public/images/uploads/1599803609356-110568068images (44).jpeg',
size: 20278
}
],
img1: [
{
fieldname: 'img1',
originalname: 'kasa.png',
encoding: '7bit',
mimetype: 'image/png',
destination: './public/images/uploads',
filename: '1599803609356-307667741kasa.png',
path: 'public/images/uploads/1599803609356-307667741kasa.png',
size: 222415
}
],
img2: [
{
fieldname: 'img2',
originalname: 'a0258141_2455659.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './public/images/uploads',
filename: '1599803609358-937438576a0258141_2455659.jpg',
path: 'public/images/uploads/1599803609358-937438576a0258141_2455659.jpg',
size: 17810
}
]
}

 

さらに細かくみていく

console.log(req.files.account_img)

でみると

[
{
fieldname: 'account_img',
originalname: 'image.png',
encoding: '7bit',
mimetype: 'image/png',
destination: './public/images/uploads',
filename: '1599803609347-263008020image.png',
path: 'public/images/uploads/1599803609347-263008020image.png',
size: 1249386
}
]

 

次に

console.log(req.files.account_img[0])

でみると


{
fieldname: 'account_img',
originalname: 'image.png',
encoding: '7bit',
mimetype: 'image/png',
destination: './public/images/uploads',
filename: '1599803609347-263008020image.png',
path: 'public/images/uploads/1599803609347-263008020image.png',
size: 1249386
}

そして

console.log(req.files.account_img[0].filename)

でみると

1599803609347-263008020image.png

 

ついに画像の名前を取得できた!