Node.jsでのディレクトリとファイルの操作方法についてまとめます。
参考として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('ディレクトリは存在しません。');
}
・構文
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」を削除しております。