ぺーぺーSEのテックブログ

備忘録用メモサイト

RSSを購読する

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

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

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

環境設定

1
$ yarn add multer

実装

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

ファイルアップロード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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などのテキストデータの場合は以下。

1
2
3
4
5
6
7
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();
};