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

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

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

1. 引言

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

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

類似的使用場景如下:

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

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

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

一個可用的中文站點:JSZip參考手冊 (asprain.cn)

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

2. 使用

2.1 安裝

使用NPM:

npm install jszip

使用在線CDN:

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

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

2.2 創(chuàng)建zip實例

一個JSZip實例是讀寫.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
        });
})

因為Hello.txt是個文本文件,可以直接使用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實現(xiàn)在瀏覽器中操作文件與文件夾的文章就介紹到這了,更多相關(guān)JSZip操作文件與文件夾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS中遞歸函數(shù)

    JS中遞歸函數(shù)

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

    js 排序動畫模擬 冒泡排序

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

    JavaScript html5 canvas繪制時鐘效果

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

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

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

    javascript Slip.js實現(xiàn)整屏滑動的手機網(wǎng)頁

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

    JavaScript彈出框與事件綁定的超詳細解析

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

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

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

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

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

    JavaScript era庫的使用詳解

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

    JS+CSS實現(xiàn)的拖動分頁效果實例

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

最新評論

崇义县| 平山县| 平原县| 鹤庆县| 贡觉县| 江安县| 云安县| 新蔡县| 古丈县| 绥宁县| 邳州市| 黄大仙区| 泰宁县| 上犹县| 横山县| 临江市| 且末县| 托克逊县| 五家渠市| 老河口市| 武川县| 峡江县| 泸溪县| 沙田区| 始兴县| 金川县| 九寨沟县| 安国市| 漠河县| 松阳县| 额济纳旗| 化州市| 新余市| 阿巴嘎旗| 九江市| 依兰县| 河津市| 页游| 三穗县| 崇左市| 正蓝旗|