Node.js・Express・Multerでファイルアップロード・ダウンロード

2017-09-21

Node.js/Expressアプリケーションへファイルアップロードしてみる。
使用するツール・ライブラリは以下。

以下の記事を読んだ前提で書く。

環境設定

$ yarn add multer

実装

controller 層へ以下のような実装を行う。

ファイルアップロード

const multer  = require('multer');

// アップロードされたファイルをストレージへ保存する場合
const storage = multer.diskStorage({
  // ファイルの保存先を指定
  destination: (req, file, cb) => {
    cb(null, '/tmp');
  },
  // ファイル名を指定(オリジナルのファイル名を指定)
  filename: (req, file, cb) => {
    cb(null, file.originalname);
  }
});

// アップロードされたファイルを一時的にメモリへ保存する場合
const storage = multer.memoryStorage();

// 1 つのファイルをアップロードする場合
const upload_ = multer({ storage: storage }).single('qafile');

const upload = (req, res, next) => {
  upload_(req, res, (err) => {
    if (err) {
      next(err);
    }
    const csvData = req.file.buffer;
    const mimetype = req.file.mimetype;
    let message = '';
    let qaData = [];
    let errorData = [];
    if(mimetype == 'text/csv' || mimetype == 'application/vnd.ms-excel') {
      // 何らかのファイルの処理ロジック
      // テキストファイルであれば `csvData.toString()` してから処理する
    }
  }
}

ファイルダウンロード

ダウンロード処理には特別ライブラリは必要ない。
CSVなどのテキストデータの場合は以下。

const download = (req, res, next) => {
  let str = 'hoge, hoge, hoge';
  res.setHeader('Content-disposition', 'attachment; filename=' + 'hoge.csv');
  res.setHeader('Content-type', 'text/csv; charset=UTF-8');
  res.write(str);
  res.end();
};

おすすめ書籍

おすすめ記事