您现在的位置是:首页 > 正文

jszip压缩服务器文件,使用JSZip压缩驻留在服务器上的PDF

2024-04-01 02:06:52阅读 3

对不起,在这篇文章中缺少链接:这是我在stackoverflow上的第一篇文章,正如错误消息所说,“[我]需要至少10个声望才能发布2个以上的链接。”

下载PDF(或任何二进制文件),你可以使用xhr.responseType = "arraybuffer"来获取原始内容(警告:这不会在IE 6-9的工作,更对下文)。你不能使用jQuery来做到这一点(但请参阅github.com/jquery/jquery/pull/1525),但是原始xhr查询或处理二进制数据的任何ajax库都可以使用。例如jszip-utils在github.com/Stuk/jszip-utils(免责声明:我是该库的贡献者)。

下面是代码:

此功能使用JSZipUtils,结果包装成能够返回一个ArrayBuffer或Uint8Array将工作jQuery.Deferred但任何图书馆。

/**

* Fetch the content, add it to the JSZip object

* and use a jQuery deferred to hold the result.

* @param {String} url the url of the content to fetch.

* @param {String} filename the filename to use in the JSZip object.

* @param {JSZip} zip the JSZip instance.

* @return {jQuery.Deferred} the deferred containing the data.

*/

function deferredAddZip(url, filename, zip) {

var deferred = $.Deferred();

JSZipUtils.getBinaryContent(url, function (err, data) {

if(err) {

deferred.reject(err);

} else {

zip.file(filename, data, {binary:true});

deferred.resolve(data);

}

});

return deferred;

}

这是主要的功能,它采用FileSaver.js为saveAs一个填充工具:

var $form = $("#download_form").on("submit", function() {

var zip = new JSZip();

var deferreds = [];

// find every checked item

$(this).find(":checked").each(function() {

var url = $(this).data("url");

var filename = url.replace(/.*\//g, "");

deferreds.push(deferredAddZip(url, filename, zip));

});

// when everything has been downloaded, we can trigger the dl

$.when.apply($, deferreds).done(function() {

var blob = zip.generate({type:"blob"});

// see FileSaver.js

saveAs(blob, "example.zip");

}).fail(function (err) {

// handle the error here

});

return false;

});

注意对IE 6-9:jszip和jszip-utils的支持IE 6-9,但没有ArrayBuffer/Uint8Array,你会得到糟糕的表演。

网站文章

  • linux mtp 代码,Linux MTP 的故事

    Linux下面有许许多多糟糕的故事,输入法算是其中之一,不过今天我们要讲的是另外一个故事。这个故事本质上和KDE关系不大,不过也算让我纠结了许久了。首先来介绍一下MTP,MTP是Media Trans...

    2024-04-01 02:06:15
  • Docker私房菜————Docker Compose| Compose安装和使用|快速单机编排|

    Docker私房菜————Docker Compose| Compose安装和使用|快速单机编排|

    目录 1.概念1.1 Docker Compose是什么1.2 YAML1.3 yml 文件配置指令参考1.4 Compose命令说明 2.compose的安装和使用2.1 安装compose2.2...

    2024-04-01 02:06:07
  • ruby on rails 撤销取消操作

    撤销操作一个常见的情况是更改控制器的名字,这时你得删除生成的文件。生成控制器时,除了控制器文件本身之外,Rails 还会生成很多其他文件(参见代码清单 3.6)。撤销生成的文件不仅仅要删除控制器文件,还要删除不少辅助文件。rails generate 命令还会自动修改routes.rb 文件,因此我们也想自动撤销这些修改。)在 Rails 中,可以使用rails des

    2024-04-01 02:06:01
  • 解决Powershell无法执行路径中包含空格的脚本文件

    解决Powershell无法执行路径中包含空格的脚本文件

    当然,如果当前已经处于powershell环境中,可以直接使用。这时可以借助powershell中的调用运算符。下面的示例展示了使用调用运算符和不使用的区别。

    2024-04-01 02:05:53
  • Leakcanary检测泄漏流程原理分析

    Leakcanary检测泄漏流程原理分析

    内存泄漏指的是程序在向系统申请分配内存空间,使用完毕后未释放,结果导致一直占据该内存单元,程序无法再使用该内存单元

    2024-04-01 02:05:14
  • TypeSprict-1.语法小入门

    类型注解 类似于 function setString(name:String),如果在传入参数时非字符串类型,编译时会报错。接口typejs有接口并且不需实现,只需要在传入时符合接口的要求结构即可。interface Person{ firstName:string; lastName:string;}function greeter(person:Person){ return "...

    2024-04-01 02:05:07
  • java 之BufferedOutputStream的flush和close方法的区别

    java 之BufferedOutputStream的flush和close方法的区别

    BufferedOutputStream的flush和close方法的区别 * flush()方法 * 1.用来刷新缓冲区,刷新后可以再次写出 * close()方法 * 2.用来关闭流释放资源 * 3.如果是带缓冲区的流对象的close()方法,不但会关闭流,还会在关闭流之前刷新缓冲区,关闭之后不能再写入 package com.feng; import ...

    2024-04-01 02:04:59
  • 线程同步 CCriticalSection(临界区类)

    线程同步 CCriticalSection(临界区类) 当多个线程访问一个独占性共享资源时,可以使用“临界区”对象。任一时刻只有一个线程可以拥有临界区对象,拥有临界区的线程可以访问被保护起来的资源或代...

    2024-04-01 02:04:19
  • 二维数组详解

    二维数组详解在Java中二维数组被看作为数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。Java并不直接支持二维数组,但是允许定义数组元素是一维数组的一维数组,以达到同样的效果...

    2024-04-01 02:04:11
  • Debug-CDK编译

    问题描述: make: *** No rule to make target ‘…/…/…/…/…/…/…/xxx.c’, needed by ‘Obj/xxx.o’. Stop. 解决方法: 删掉obj文件夹,重新编译

    2024-04-01 02:04:04