article-thumbnail

Node.jsでのディレクトリ・ファイル操作方法まとめ

カテゴリ: Node.js

タグ: npm,adm-zip,fs-extra

2020-11-25 22:40:50

【概要】

Node.jsでのディレクトリとファイルの操作方法についてまとめます。

参考としてNuxt.jsでのzipファイルの投稿方法については以下のドキュメントにまとめているので、参考にしてみて下さい。

Nuxt.jsでzipファイルをアップロードする方法


【初期設定】

1. multerとfs-extraとadm-zipをインストールする

npm i multer fs-extra adm-zip


2. Node.jsにてmulterとfs-extraとadm-zipを読み込む

const fs = require('fs-extra');
const multer = require('multer');
const multerStorage = multer.diskStorage({
destination (req, file, cb) {
cb(null, '/static');
},
filename (req, file, cb) {
cb(null, file.originalname);
}
});
const upload = multer({ storage: multerStorage });
const admZip = require('adm-zip');

※ 「multer.diskStorage」メソッドのデフォルト設定では投稿されたzipファイル名がランダムな文字列で保存されます。

元のファイル名で保存する場合の処理を記述しているので、不要な場合はメソッド内部で設定されている「filename」部分は削除して下さい。


【ディレクトリ確認】

・構文

fs.existsSync(検索対象パス);

存在する場合には「true」を返し、存在しない場合は「false」を返します。


・例文

下記ではstatic/uploadディレクトリが存在確認をしております。

if (fs.existsSync('./static/upload')) {
console.log('ディレクトリが存在します。');
} else {
console.log('ディレクトリは存在しません。');
}


【zipファイル解凍】

・構文

let zip = new admZip(zipファイルパス);
zip.extractAllTo(解凍先のパス, true);

先ず、「admZip」メソッドの引数にzipファイルのパスを記述します。

「zip.extractAllTo」メソッドで指定したパス先に解凍します。


・例文

let zip = new admZip('./static/zip/sample.zip');
zip.extractAllTo('./static/upload/', true);

上記は「/static/zip」配下に存在する「sample.zip」を「/static/tmp/」配下に解凍します。


【ディレクトリ作成】

・構文

fs.mkdir(作成対象のディレクトリパス);


・例文

fs.mkdir('./static/tmp/');

staticディレクトリ配下にtmpディレクトリを作成します。


【ディレクトリ同期】

・構文

fs.copySync(同期元パス, 同期先パス);

同期元のファイル・ディレクトリが第2引数に設定したパスに同期されます。


・例文

fs.copySync('./static/tmp/sample', './static/upload/sample');

上記は「/static/tmp/sample」配下のディレクトリ・ファイルを「/static/upload/sample」に同期させます。

よって、どちらのsampleディレクトリも同じ内容になります。

筆者はzipファイル解凍後に、中身のバリデーション等を行う際に使います。


【ディレクトリ削除】

・構文

fs.removeSync(削除対象ディレクトリのパス);


・例文

fs.removeSync('./static/tmp/sample');

上記は「/static/tmp/sample」ディレクトリを削除します。


【ファイル削除】

・構文

fs.unlink(削除対象のファイルパス, (err) => {
if (err) throw err;
console.log(削除対象のファイルパス + ' was deleted');
});

※ 上記はerrのcatchとlog出力を行っており、不要な場合は削除して下さい。


・例文

fs.unlink('./static/zip/sample.zip', (err) => {
if (err) throw err;
console.log('./static/zip/sample.zip was deleted');
});

上記は「/static/zip/sample.zip」を削除しております。