multerを使ってファイルを扱いたいけど、保存したくない
expressでアプリケーションを作成していて、ファイルを加工してそのままユーザにダウンロードさせたい、というケースがありました。
multerってモジュールで、formからpostされたfileを受け取ることができる、ということだったのでやってみました!
やったこと
まずはmulterをインストール
npm i multer
app.jsに追記
const multer = require('multer'); const upload = multer(); // 中略 routerで下記設定をする app.post('/profile', upload.none(), function (req, res, next) { // req.body contains the text fields })
しかし、これでブラウザからfileをpostすると「MulterError: Unexpected field」というエラーを吐きます。
いろいろ調べた結果、upload.none()が悪さをしているようで、upload.any()としたところエラーはなくなり、正常に処理される様になりました...!?
最終的には
const multer = require('multer'); const upload = multer(); // 中略 app.post('/upload', upload.any(), (req, res, next) => { const f = req.files[0].buffer.toString(); // 中略 res.setHeader('Content-disposition', 'attachment; filename=converted.csv'); res.set('Content-Type', 'text/csv'); res.status(200).send(csv); });
となりました!
ちなみに、最後の3行でファイルをダウンロードさせています。
最後に
multer、まだまだちょっと使っただけで、全然理解できていないです。
もし今後も使う機会が多いようなら、一度ドキュメントをちゃんと読むなり、ソース読むなりして理解したいです!
以上です。
読んでくれてありがとうございました!