typescript で ファイルやフォルダを tar, gzip, tgz, zip 形式に圧縮する方法を紹介します。 なお、gzip形式でのフォルダ圧縮はできません。
1. Compressing モジュールのインストール
compressing というモジュールを使用します。
https://www.npmjs.com/package/compressing
npm install compressing
でインストールできます。
2. 圧縮を行う _compress クラス
すこし長いですが、各関数を1つのクラスにまとめています。
// comp.ts
import * as compressing from "compressing";
export interface ICompress {
file2zip(filepath: string, destpath: string): any;
file2gzip(filepath: string, destpath: string): any;
file2tar(filepath: string, destpath: string): any;
file2tgz(filepath: string, destpath: string): any;
dir2zip(inputdir: string, destpath: string): any;
dir2tar(inputdir: string, destpath: string): any;
dir2tgz(inputdir: string, destpath: string): any;
}
export default class _compress implements ICompress{
file2zip(filepath: string, destpath: string) {
compressing.zip.compressFile(filepath, destpath)
.then( () => {
return 0
})
.catch( (e) => {
return e
})
}
file2gzip(filepath: string, destpath: string) {
compressing.gzip.compressFile(filepath, destpath)
.then( () => {
return 0
})
.catch( (e) => {
return e
})
};
file2tar(filepath: string, destpath: string) {
compressing.tar.compressFile(filepath, destpath)
.then( () => {
return 0
})
.catch( (e) => {
return e
})
};
file2tgz(filepath: string, destpath: string) {
compressing.tgz.compressFile(filepath, destpath)
.then( () => {
return 0
})
.catch( (e) => {
return e
})
};
dir2zip(inputdir: string, destpath: string) {
compressing.zip.compressDir(inputdir, destpath)
.then( () => {
return 0
})
.catch( (e) => {
return e
})
}
dir2tar(inputdir: string, destpath: string) {
compressing.tar.compressDir(inputdir, destpath)
.then( () => {
return 0
})
.catch( (e) => {
return e
})
}
dir2tgz(inputdir: string, destpath: string) {
compressing.tgz.compressDir(inputdir, destpath)
.then( () => {
return 0
})
.catch( (e) => {
return e
})
}
}
3. 関数の説明
1. file2zip 関数
- 処理内容:ファイルをzip形式に圧縮します。
- 引数:
filepath
圧縮するファイルパス,destpath
zipファイル出力先ファイルパス - 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。
2. file2gzip 関数
- 処理内容:ファイルをgzip形式に圧縮します。
- 引数:
filepath
圧縮するファイルパス,destpath
gzipファイル出力先ファイルパス - 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。
3. file2tar 関数
- 処理内容:ファイルをtar形式に圧縮します。
- 引数:
filepath
圧縮するファイルパス,destpath
tarファイル出力先ファイルパス - 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。
4. file2tgz 関数
- 処理内容:ファイルをtgz形式に圧縮します。
- 引数:
filepath
圧縮するファイルパス,destpath
tgzファイル出力先ファイルパス - 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。
5. dir2zip 関数
- 処理内容:ディレクトリをzip形式に圧縮します。
- 引数:
inputdir
圧縮するディレクトリ,destpath
zipファイル出力先ファイルパス - 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。
6. dir2tar 関数
- 処理内容:ディレクトリをtar形式に圧縮します。
- 引数:
inputdir
圧縮するディレクトリ,destpath
tarファイル出力先ファイルパス - 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。
7. dir2tgz 関数
- 処理内容:ディレクトリをtgz形式に圧縮します。
- 引数:
inputdir
圧縮するディレクトリ,destpath
tgzファイル出力先ファイルパス - 返り値: 正常終了の場合は 0、異常終了の場合はエラー内容を返します。
4. 使い方
import _compress from "./comp";
// ---
const compress = new _compress;
const inputFilePath:string = "./sample.txt"
const zipFilePath:string = "./sample.zip"
const gzipFilePath:string = "./sample.gzip"
const tarFilePath:string = "./sample.tar"
const tgzFilePath:string = "./sample.tgz"
const inputDir:string = "./sample"
const zipFilePath2:string = "./sampledir.zip"
const tarFilePath2:string = "./sampledir.tar"
const tgzFilePath2:string = "./sampledir.tgz"
// ---
compress.file2zip(inputFilePath, zipFilePath);
compress.file2gzip(inputFilePath, gzipFilePath);
compress.file2tar(inputFilePath, tarFilePath);
compress.file2tgz(inputFilePath, tgzFilePath);
compress.dir2zip(inputDir, zipFilePath2);
compress.dir2tar(inputDir, tarFilePath2);
compress.dir2tgz(inputDir, tgzFilePath2);
クラスをimoprt して、new でインスタンスを生成している感じです。 あとは、関数を呼び出します。
5. ダウンロード
comp.ts はこちらからダウンロード可能です。
実践TypeScript【電子書籍】[ 吉井健文 ]
価格:3726円 (2019/7/23時点)
楽天で購入
](https://hb.afl.rakuten.co.jp/hgc/18648e8b.7d833591.18648e8c.ed1bab3c/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Frakutenkobo-ebooks%2F5456816fd8833397a6aa8b80647873ad%2F%3Fscid%3Daf_pc_bbtn&m=http%3A%2F%2Fm.rakuten.co.jp%2Frakutenkobo-ebooks%2Fi%2F18341447%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxfQ==)
コメント