|||||||||||||||||||||

なんぶ電子

- 更新: 

ブラウザでZIPファイル展開

ページバナー

単純な構造かつサイズの小さなZIPファイル向けに、ブラウザでファイルを展開するツールになります。

ファイルの処理はJavaScriptで行います。そのため利用端末やファイルサイズ、構造によっては動作が遅かったり、正常に動かない場合もあるかもしれません。ただ、データはサーバーには一切送信しませんのでその点においては安全です。余計な通信も発生しません。

ファイル一覧における/はフォルダ階層を示します。ブラウザからはフォルダ階層を反映した形のダウンロードができないので、ご自身でフォルダ階層を作成してください。複雑な階層構造の場合は7Zip等のツールを使ってOS経由で展開することをお勧めします。

展開後のファイル名が日本語だと文字化けします。 encoding.jsライブラリを利用させていただき、SJISの文字化けに対応しました。

サイズの大きなファイルや、ファイル数が多かったり複雑な構造の圧縮ファイルを処理するとブラウザがフリーズ等を起こすかもしれません。各自の責任で利用してください。

アプリはこちらにあります。

ライセンス情報

Vue.js Released under the MIT License Copyright © 2014-2020 Evan You
zlib.js Released under the MIT License Copyright © 2012 imaya
文字コード変換encoding.jsCopyright (c) 2014-2019 Polygon Planet  MIT-LICENSE
ブラウザZIP展開ツール Released under the MIT License Copyright © 2020 なんぶ電子

ソースコード

ライセンス表示の通りVue.jsを利用して作成しています。またZIPファイルを展開するzlib.js:JavaScriptライブラリを利用しています。

zlib.jsの部分は当ページではコードを直接ページに記載していますが、ここでのソースのコードの紹介は割愛させていただいています。作者様のページをご確認ください。

encoding.jsはCDNで利用させていただいております。

HTML&Script


    <div id="app">
        <div>
        <p>ZIPファイル</p>
        <input type="file" v-on:change="makeList" accept="application/zip"><br>
        </div>
        <div><p>{{strErr}}</p></div>
        <div>
        <p>展開後のファイル一覧</p>
        <ul style="list-style: none;">
            <li v-for="(item, index) in targetFiles"><button v-on:click="download(index);">{{item}}</button></li>
        </ul>
        </div>
    </div>
    <script src="https://unpkg.com/vue"></script>
    <script type="module">
        var vuejs = new Vue({
        el: "#app",
        data:{
        targetFiles: [],
        rawDatas:[],
        strErr:"",  
        },
        methods: {
        makeList: function(e) {
            this.strErr = "処理中です...";
            try {
            let zipfile = e.target.files[0];
            let fileReader = new FileReader();
            //ファイルの読み込みが終了した際の処理を先に記述
            fileReader.onload = function(evt) {
                let buffer = evt.target.result;
                let uint8Array = new Uint8Array(buffer);
                let unzip = new Zlib.Unzip(uint8Array);
                let tmpList = unzip.getFilenames();
    
                vuejs.targetFiles = []
                vuejs.rawDatas =[];
    
                for (let i =0; i < tmpList.length; i++) {
                //最後が/で終わっている場合はディレクトリ
                if (tmpList[i].slice(-1)==='/') {
                    continue;
                }
                //vuejs.targetFiles.push(tmpList[i]);
                //文字化け対応
                vuejs.targetFiles.push(Encoding.convert(tmpList[i],"UNICODE","AUTO"));
                let blob = new Blob([unzip.decompress(tmpList[i])],{type: "octet/stream"});
                vuejs.rawDatas.push(blob);
                }
                vuejs.strErr = "対象ファイルをクリックするとダウンロードが始まります";
            };
            //読み込み
            fileReader.readAsArrayBuffer(zipfile);
            } catch(er) {
            donothing
            this.strErr = er;
            console.log(er);
            }
        },
        download: function(intIndex) {
            let url = URL.createObjectURL(this.rawDatas[intIndex]);
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.style = "display: none";
            a.href = url;
            //フォルダ階層を除去して名前を渡す
            a.download = this.targetFiles[intIndex].split('/').pop();
            a.click();
            URL.revokeObjectURL(url);
        },
        },
    })
    </script>
    <script>
    //zlib.js(JS ZIP展開ライブラリ)読み込み
    </script>
    <!--encoding.js(文字変換ライブラリ)読み込み(CDN)-->
    

ZIPファイル展開アプリ

ZIPファイル


メッセージ

 {{strErr}}

展開後のファイル一覧

 

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告