最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何使用JSZip實(shí)現(xiàn)在瀏覽器中操作文件與文件夾

 更新時(shí)間:2024年04月19日 08:20:52   作者:當(dāng)時(shí)明月在曾照彩云歸  
這篇文章主要介紹了如何使用JSZip實(shí)現(xiàn)在瀏覽器中操作文件與文件夾,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下

1. 引言

瀏覽器中如何創(chuàng)建文件夾、寫入文件呢?

答曰:可以借助JSZip這個(gè)庫(kù)來(lái)實(shí)現(xiàn)在瀏覽器內(nèi)存中創(chuàng)建文件與文件夾,最后只需下載這個(gè).zip文件,就是最終得結(jié)果

類似的使用場(chǎng)景如下:

  • 在線下載很多圖片,希望這些圖片能分類保存到各個(gè)文件夾并最終下載成一個(gè)zip文件
  • 在線下載很多文檔,希望這些文檔能分類保存到各個(gè)文件夾并最終下載成一個(gè)zip文件

本質(zhì)上都是希望瀏覽器能創(chuàng)建文件夾和創(chuàng)建文件,最終保存成一個(gè)文件來(lái)提供下載

JSZip的GitHub站點(diǎn):Stuk/jszip: Create, read and edit .zip files with Javascript (github.com)

一個(gè)可用的中文站點(diǎn):JSZip參考手冊(cè) (asprain.cn)

下面主要記錄一下基礎(chǔ)使用,詳細(xì)的API請(qǐng)參考上述文檔

2. 使用

2.1 安裝

使用NPM:

npm install jszip

使用在線CDN:

<script src="https://cdn.bootcdn.net/ajax/libs/jszip/3.10.1/jszip.js"></script>

為了可以代碼可以快速?gòu)?fù)現(xiàn),筆者這里使用CDN的方式引入

2.2 創(chuàng)建zip實(shí)例

一個(gè)JSZip實(shí)例是讀寫.zip文件的基礎(chǔ)

const zip = new JSZip();

2.3 讀取zip文件

讀取官方的示例文件text.zip

const zip = new JSZip();
 
fetch("https://stuk.github.io/jszip/test/ref/text.zip")       // 1) fetch the url
    .then(function (response) {                       // 2) filter on 200 OK
        if (response.status === 200 || response.status === 0) {
            return Promise.resolve(response.blob());
        } else {
            return Promise.reject(new Error(response.statusText));
        }
    })
    .then(data => zip.loadAsync(data))                            // 3) 加載數(shù)據(jù)
    .then(function (zip) {
        zip.forEach(function (relativePath, file) {  	// 4) 遍歷壓縮包內(nèi)的文件
           console.log(`path: ${relativePath}, file: ${file.name}`)
           // 輸出:path: Hello.txt, file: Hello.txt
        });
})

因?yàn)?code>Hello.txt是個(gè)文本文件,可以直接使用string的方式讀取內(nèi)部的數(shù)據(jù)

const zip = new JSZip();
 
fetch("https://stuk.github.io/jszip/test/ref/text.zip")       // 1) fetch the url
    .then(function (response) {                       // 2) filter on 200 OK
        if (response.status === 200 || response.status === 0) {
            return Promise.resolve(response.blob());
        } else {
            return Promise.reject(new Error(response.statusText));
        }
    })
    .then(data => zip.loadAsync(data))                            // 3) chain with the zip promise
    .then(function (zip) {
        return zip.file("Hello.txt").async("string"); // 4) 讀取Hello.txt文件
    })
    .then(function success(text) {
        console.log(text); // 輸出:Hello World
    }, function error(e) {
        console.error(e);
    });

2.4 創(chuàng)建zip文件

寫入文件與數(shù)據(jù)

zip.file("file.txt", "content");
new Promise((resolve, reject) => {
    resolve(zip.file("file.txt").async("string"))
}).then(data => {
    console.log(data); // 輸出:content
})

寫入指定文件夾下的指定文件

zip.file("text/file.txt", "content");
zip.forEach(function (relativePath, file) {
    console.log(`path: ${relativePath}, file: ${file.name}`)
    // 輸出:path: text/file.txt, file: text/file.txt
});

最后的目錄結(jié)構(gòu)可以參考下圖

2.5 下載zip文件

這里將上面的file.txt下載為zip,使用a鏈接的方式

zip.generateAsync({ type: "blob" }).then(function (content) {
    document.body.appendChild(document.createElement("a"));
    document.querySelector("a").href = URL.createObjectURL(content);
    document.querySelector("a").download = "test.zip";
    document.querySelector("a").click();
});

完整的代碼如下:

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jszip/3.10.1/jszip.js"></script>
</head>
 
<body>
 
    <script>
        const zip = new JSZip();
 
        // fetch("https://stuk.github.io/jszip/test/ref/text.zip")       // 1) fetch the url
        //     .then(function (response) {                       // 2) filter on 200 OK
        //         if (response.status === 200 || response.status === 0) {
        //             return Promise.resolve(response.blob());
        //         } else {
        //             return Promise.reject(new Error(response.statusText));
        //         }
        //     })
        //     .then(data => zip.loadAsync(data))                            // 3) chain with the zip promise
        //     .then(function (zip) {
        //         return zip.file("Hello.txt").async("string"); // 4) chain with the text content
        //     })
        //     .then(function success(text) {
        //         console.log(text);
        //     }, function error(e) {
        //         console.error(e);
        //     });
        zip.file("text/file.txt", "content");
        zip.forEach(function (relativePath, file) { 
           console.log(`path: ${relativePath}, file: ${file.name}`)
        });
 
        zip.generateAsync({ type: "blob" }).then(function (content) {
            document.body.appendChild(document.createElement("a"));
            document.querySelector("a").href = URL.createObjectURL(content);
            document.querySelector("a").download = "test.zip";
            document.querySelector("a").click();
        });
    </script>
 
</body>
 
</html>

到此這篇關(guān)于詳解如何使用JSZip實(shí)現(xiàn)在瀏覽器中操作文件與文件夾的文章就介紹到這了,更多相關(guān)JSZip操作文件與文件夾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS中遞歸函數(shù)

    JS中遞歸函數(shù)

    編程語(yǔ)言中,函數(shù)Func(Type a,……)直接或間接調(diào)用函數(shù)本身,則該函數(shù)稱為遞歸函數(shù)。遞歸函數(shù)不能定義為內(nèi)聯(lián)函數(shù)。這篇文章主要介紹了JS中遞歸函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • js 排序動(dòng)畫模擬 冒泡排序

    js 排序動(dòng)畫模擬 冒泡排序

    在js中,想讓線程sleep一下確實(shí)不是一件簡(jiǎn)單的事情,過(guò)多的使用定時(shí)器或者回調(diào)函數(shù),會(huì)讓復(fù)雜,凌亂,這時(shí),可以考慮能否使用隊(duì)列來(lái)做一些簡(jiǎn)
    2012-07-07
  • JavaScript html5 canvas繪制時(shí)鐘效果

    JavaScript html5 canvas繪制時(shí)鐘效果

    這篇文章主要介紹了JavaScript html5繪制時(shí)鐘效果的相關(guān)資料,使用HTML5的canvas標(biāo)簽和Javascript腳本,模擬顯示了一個(gè)時(shí)鐘,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Layui表格行工具事件與數(shù)據(jù)回填方法

    Layui表格行工具事件與數(shù)據(jù)回填方法

    今天小編就為大家分享一篇Layui表格行工具事件與數(shù)據(jù)回填方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • javascript Slip.js實(shí)現(xiàn)整屏滑動(dòng)的手機(jī)網(wǎng)頁(yè)

    javascript Slip.js實(shí)現(xiàn)整屏滑動(dòng)的手機(jī)網(wǎng)頁(yè)

    Slip.js能做什么?Slip.js可以讓你的手機(jī)網(wǎng)站像原生手機(jī)軟件一樣慣性滾動(dòng),手觸圖片輪換等等,對(duì)Slip.js感興趣的小伙伴們可以參考一下
    2015-11-11
  • JavaScript彈出框與事件綁定的超詳細(xì)解析

    JavaScript彈出框與事件綁定的超詳細(xì)解析

    這篇文章主要介紹了JavaScript彈出框與事件綁定的相關(guān)資料,通過(guò)示例講解了實(shí)現(xiàn)方式、綜合應(yīng)用及最佳實(shí)踐,如避免內(nèi)存泄漏、優(yōu)化性能、提升用戶體驗(yàn)與可訪問(wèn)性,需要的朋友可以參考下
    2025-05-05
  • CSDN上快速結(jié)貼的方法,JS實(shí)現(xiàn)

    CSDN上快速結(jié)貼的方法,JS實(shí)現(xiàn)

    CSDN上快速結(jié)貼的方法,JS實(shí)現(xiàn)...
    2007-03-03
  • JavaScript提升性能的常用技巧總結(jié)【經(jīng)典】

    JavaScript提升性能的常用技巧總結(jié)【經(jīng)典】

    這篇文章主要介紹了JavaScript提升性能的常用技巧,結(jié)合實(shí)例形式總結(jié)分析了JavaScript編程中常見(jiàn)的性能提升優(yōu)化技巧,涉及作用域、循環(huán)、變量、DOM及函數(shù)節(jié)流等,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2016-06-06
  • JavaScript era庫(kù)的使用詳解

    JavaScript era庫(kù)的使用詳解

    這篇本文主要給大家介紹了JavaScript era庫(kù)的使用,使用 ora 這個(gè) JavaScript 庫(kù)可以在命令行應(yīng)用程序中提供漂亮的加載狀態(tài)提示,本文詳細(xì)介紹如何使用該庫(kù),并結(jié)合多個(gè)例子演示其功能,需要的朋友可以參考下
    2024-02-02
  • JS+CSS實(shí)現(xiàn)的拖動(dòng)分頁(yè)效果實(shí)例

    JS+CSS實(shí)現(xiàn)的拖動(dòng)分頁(yè)效果實(shí)例

    這篇文章主要介紹了JS+CSS實(shí)現(xiàn)的拖動(dòng)分頁(yè)效果,可實(shí)現(xiàn)鼠標(biāo)拖動(dòng)頁(yè)面翻轉(zhuǎn)到上一頁(yè)或下一頁(yè)的功能,涉及javascript操作頁(yè)面元素與css樣式的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

柏乡县| 安义县| 阜阳市| 西乌珠穆沁旗| 永吉县| 甘德县| 汨罗市| 蒲城县| 海南省| 唐山市| 杭锦旗| 淮南市| 武隆县| 长治县| 肥乡县| 图木舒克市| 全椒县| 沙河市| 靖州| 延庆县| 竹北市| 阿坝县| 宁国市| 安平县| 浦北县| 漠河县| 陆丰市| 稻城县| 浦北县| 和田县| 尉氏县| 贵溪市| 绥棱县| 亳州市| 琼结县| 资溪县| 德惠市| 郑州市| 驻马店市| 石林| 高安市|