クライアントが'Content-Type': 'multipart/form-data'
で画像をPOSTした場合
Expressでどういう処理をすればいいのか悩んだので記載しておきます。
multerを使います。
const express = require('express')
const multer = require('multer')
const app = express()
const storage = multer.diskStorage({
destination: function (req, file, cb) {
// 保存したいパス
cb(null, '/var/image')
}
,
filename: function (req, file, cb) {
// アップロードしたときのファイル名で保存
cb(null, file.originalname)
}
})
const upload = multer({ storage: storage })
// listening 3000 port
const server = app.listen(3000)
app.post('/image', upload.single('file'), function(req, res, next) {
// POSTされた画像の情報をJSONで取得
const req_file_json = JSON.stringify(req.file)
// ***************
// お好きな処理をここに
// ***************
res.json({'result': 'success!'})
})
上記の場合サーバ側では /image/var/[ファイル名]
に画像が保存されます。
画像の情報も一行で取得できるので便利ですね。
// POSTされた画像の情報をJSONで取得
const req_file_json = JSON.stringify(req.file)
bodyにも情報が入っている場合は
const req_body_json = JSON.stringify(req.body)
で取得できますね。
画像をアップロードするときに他の情報(画像の正解ラベル等)がbodyに入っていてもこれで対応できますね。