NON STOP TECH BLOG

ノンストップで書きまくる技術ブログ

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、まだまだちょっと使っただけで、全然理解できていないです。
もし今後も使う機会が多いようなら、一度ドキュメントをちゃんと読むなり、ソース読むなりして理解したいです!

以上です。
読んでくれてありがとうございました!