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

对不起,在这篇文章中缺少链接:这是我在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,你会得到糟糕的表演。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值