1. 程式人生 > >FileSystem API 實現檔案下載器 2

FileSystem API 實現檔案下載器 2

提醒:本文最後更新於 1927 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

上篇文章講到如何用 JavaScript 編寫下載器,不少小夥伴看了覺得神奇。在本篇文章裡,我把之前寫的一個 JS 遊戲全部資源打成 Zip 包,用上回寫的下載器載入,再解壓到 FileSystem,最後直接執行這個遊戲。也就是說只需要一次 HTTP 請求,就可以獲得遊戲所需的全部資源。

這篇文章,我們不會從零開始實現我們的目標,除了複用上回的下載器,還會用到 github 上兩個好用的開源 JS 庫,filer.jszip.js

filer.js 是對 FileSystem API 的二次封裝,提供了更友好的介面和更多的功能; zip.js 提供瞭解壓 Zip 檔案的功能。zip.js 原始碼裡的 sjis.js 檔案是用來處理日文字元,可以去掉。這兩個庫的具體使用方法,可以直接去各自的 github 主頁檢視。

首先,我們還是通過 XHR 下載所需的 Zip 包,指定 responseType 為 arraybuffer。把下載到的資料包裝為 Uint8Array,交給 zip.js 解壓,這部分程式碼如下:

var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);

xhr.onreadystatechange = function() {
    if (this.readyState == 4) {
        if (this.response != null) {
            var result = Zip.inflate(new
Uint8Array(this.response)); console.log(result); } } }; xhr.responseType = 'arraybuffer'; xhr.send();

這樣,Zip 包就被解壓為下面這樣格式的資料了:

zipdata

ZipData 包含很多資訊,從命名來看,files 物件中應該只包含檔案,但實際上如上圖所示,「res/」這樣的目錄也混在其中,不過我們可以簡單地通過最後一個字元來過濾掉它們。每個 file 物件的 data 屬性存放的是壓縮資料,呼叫物件的 inflate() 方法會返回這個檔案的原始資料。

接下來,我們申請 FileSystem 使用許可權,遍歷 files 物件,並在 FileSystem 中按照 Zip 包內的目錄結構儲存檔案。這部分程式碼使用 filer.js 實現很簡單,filer.js 提供的 mkdir() 方法可以遞迴建立多級目錄,類似 linux 的「mkdir -p」。另外,FileSystem Api 中操作檔案都是非同步操作,為了使用方便,我們可以基於 promise 做二次封裝。這部分程式碼不貼了,可以直接看最後的 Demo。

在所有檔案都寫入完成後,我們獲得入口檔案(index.html)在 FileSystem 中的地址,直接 location 跳轉就可以執行這個遊戲了:

filer.create('index.html', false, function(file) {
    location.href = file.toURL();
});

完整的 Demo,請點選這裡觀看

--EOF--

提醒:本文最後更新於 1927 天前,文中所描述的資訊可能已發生改變,請謹慎使用。

相關推薦

FileSystem API 實現檔案下載 2

提醒:本文最後更新於 1927 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 上篇文章講到如何用 JavaScript 編寫下載器,不少小夥伴看了覺得神奇。在本篇文章裡,我把之前寫的一個 JS 遊戲全部資源打成 Zip 包,用上回寫的下載器載入,再解壓到 FileSystem,最後直接執行這個

FileSystem API 實現檔案下載

提醒:本文最後更新於 1928 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 各種基於 HTML5 的檔案上傳已經被大家玩得爛熟,常見的資料夾上傳、拖拽上傳以及拷貝剪下板資料上傳,都可以在各大網盤、WebIM 中見到。本文實現的純 JavaScript 多區塊併發下載器,要使用到 File

iOS開發(OC)——iOS原生API實現檔案下載

新建繼承NSObject類Downloader Downloader.h程式碼 #import <Foundation/Foundation.h> #import <UIKit

AWS S3 API實現檔案上傳下載

近日專案需要使用AWS S3的API實現檔案的上傳和下載功能,才發現網上關於.net實現該功能的文章不多,有幾篇也都是很老版本的AWS的使用描述了,寫法和封裝的類等等都基本上報廢了。雖然這樣,但還是很感謝那幾篇文章給我指點了方向。下面我就把實現API的方法提供給大家: Am

socket http檔案下載c語言實現

socket是網路程式設計的基石, 本文介紹如何使用c語言使用socket實現一個http檔案下載器. 下載分為以下幾個過程 解析出下載地址中的域名和檔名 通過域名獲取伺服器的IP地址 與目標伺服器建立連線 構建http請求頭並將其傳送到伺服器 等待

在Java中使用多執行緒結合斷點續傳實現一個簡單的檔案下載

這篇部落格介紹在android中使用多執行緒和斷點續傳實現一個簡單的檔案下載器 第一步:啟動Tomcat伺服器,將需要下載的檔案部署到Tomcat伺服器上 第二步:使用eclipse建立一個Java工程,並且在工程中新增下面的程式碼 package com.fyt.mul

electron 實現檔案下載管理

檔案下載是我們開發中比較常見的業務需求,比如:匯出 excel。 web 應用檔案下載存在一些侷限性,通常是讓後端將響應的頭資訊改成 `Content-Disposition: attachment; filename=xxx.pdf`,觸發瀏覽器的下載行為。 在 electron 中的下載行為,都會觸發

UWP中使用Composition API實現吸頂(2

.com 部分 線性 col 調整 row 系統內置 模板 高度 原文:UWP中使用Composition API實現吸頂(2)在上一篇中我們討論了不涉及Pivot的吸頂操作,但是一般來說,吸頂的部分都是Pivot的Header,所以在此我們將討論關於Pivot多個Item

Spring 實現檔案下載功能

方式1: public void download(HttpServletResponse response,@RequestParam(value="params") String params) throws IOException, DocumentException{ response

JQuery 實現檔案下載

GET方式 window.location.href = url; POST方式 var url = "下載介面地址"; // 構造隱藏的form表單 var $form = $("<form id='download' class='hidden' method='po

Servlet實現檔案下載

在瀏覽網站的時候很多涉及到檔案下載的情況,在初學JavaWeb的時候我們如何使用Servlet來實現檔案下載呢? 在學習此之前,我們要知道兩個重要的概念。request和response。請求和相應。 請求:請求頭、請求行、請求體。 相應:相應頭、相應行、相應體。 大家可以上網找一下

java web實現檔案下載

javaweb實現檔案下載 實現檔案下載 解決下載檔名帶有中文亂碼問題 效果圖 實現思路 根據請求連接獲取檔名和檔案型別,設定響應頭,獲取輸入流和輸出流 核心程式碼 public void doGet(HttpServletR

mvc 在彈出框中實現檔案下載

var myParent = parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent; FileDown = function (fileName, realFileName) { $

前端實現檔案下載和拖拽上傳

蘇格團隊 作者:WDZ 交流QQ群:855833773 歡迎加入我們的團隊,微信聯絡方式:foreverpx_cjl 筆者在業務中碰到了需要下載示例和拖拽上傳並實現進度條的功能,針對過程中遇到的問題,筆者進行了相應的總結。 需求 頁面中增加下載示例按鈕

Java多執行緒使用執行緒池實現檔案下載

多執行緒下載原理: 1、基本思路是將檔案分段切割、分段傳輸、分段儲存。 2、分段切割用到HttpUrlConnection物件的setRequestProperty(“Range”, “bytes=” + start + “-” + end)方法。 3、分段傳輸用到HttpU

使用Servlet實現檔案下載

檔案下載 直接在html或jsp頁面寫入超連結 <!--點選後 瀏覽器可以解析的會自動開啟 不能解析度提示下載--> <a href="專案名/資源路徑">資源路</a> 編寫檔案下載功能 即不讓瀏覽器解析

Spring Boot實現檔案下載功能

我們只需要建立一個控制器(Controler)檔案,即Controller目錄下的File_Download.java,其完整目錄如下: @Controller public class File_Download { //實現Spring Boot 的檔案下載功能,對映網址為/download

ASP.NET Core Web API實現圖片下載

前端訪問下載圖片API下載圖片。 一、ASP.NET Core Web API程式碼 方案一: [Route("api/[controller]")] [ApiController

C#實現檔案下載

/// <summary> /// 使用OutputStream.Write分塊下載檔案 /// </summary> /// <param name="filePath"></param>

通過檔案url,實現檔案下載

通過url實現檔案下載 @Log("下載檔案") @ResponseBody @RequestMapping(value = "/download", method = RequestMethod.GET) public R Download(HttpServletResp