当前位置: 首页 > 知识库问答 >
问题:

客户端下载服务器生成的zip文件

蓟和煦
2023-03-14

在有人说“重复”之前,我只想确保大家知道,我已经回顾了这些问题:

1) 使用angular和php,不确定这里发生了什么(我不知道php):下载zip文件并从angular方法触发“保存文件”对话框

2) 什么都做不到:如何使用angular下载zip文件

3) 这个人已经可以下载了,这已经超过了我想弄明白的点:从一个按钮动作触发的角度下载外部zip文件

4) 这个问题没有答案:下载。nodejs中服务器的zip文件

5) 我甚至不知道这是什么语言:https://stackoverflow.com/questions/35596764/zip-file-download-using-angularjs-directive

鉴于这些问题,如果这仍然是重复的,我道歉。这是这个问题的另一个版本。

我的角速度是1.5。X客户机给了我一个标题列表,每个标题都有一个相关文件。我的节点4。X/Express 4。X服务器获取该列表,获取文件位置,使用来自npm的express zip创建一个zip文件,然后将该文件流回到响应中。然后,我希望我的客户端启动浏览器的“下载文件”选项。

这是我的客户机代码(Angular 1.5.X):

function bulkdownload(titles){
    titles = titles || [];
    if ( titles.length > 0 ) {
        $http.get('/query/bulkdownload',{
            params:{titles:titles},
            responseType:'arraybuffer'
        })
        .then(successCb,errorCb)
        .catch(exceptionCb);
    }

    function successCb(response){
        // This is the part I believe I cannot get to work, my code snippet is below
    };

    function errorCb(error){
            alert('Error: ' + JSON.stringify(error));
    };

    function exceptionCb(ex){
            alert('Exception: ' + JSON.stringify(ex));
    };
};

带有express zip的节点(4.X)代码,https://www.npmjs.com/package/express-zip:

router.get('/bulkdownload',function(req,resp){
    var titles = req.query.titles || [];

    if ( titles.length > 0 ){
        utils.getFileLocations(titles).
        then(function(files){
            let filename = 'zipfile.zip';

            // .zip sets Content-Type and Content-disposition
            resp.zip(files,filename,console.log);
        },
        _errorCb)
    }
});

以下是我的客户端代码(Angular 1.5.X)中的successCb:

function successCb(response){
    var URL = $window.URL || $window.webkitURL || $window.mozURL || $window.msURL;
    if ( URL ) {
        var blob = new Blob([response.data],{type:'application/zip'});
        var url = URL.createObjectURL(blob);
        $window.open(url);
    }
};

“斑点”部分似乎工作正常。在IE的调试器中检查它,它看起来确实像八位字节信息的文件流。现在,我相信我需要把这个blob放入一些HTML5指令中,从浏览器中启动“另存文件为”。也许吧?也许不是吧?

由于90%的用户都在使用IE11,我在PhantomJS(Karma)和IE中测试了我的所有操作。当我运行代码时,我在警报窗口中得到了旧的“访问被拒绝”错误:

Exception: {"description":"Access is denied...<stack trace>}

欢迎提出建议、澄清、回答等!

共有3个答案

万志专
2023-03-14

我更新了我的bulkload方法,使用$window.open(...)而不是$http.get(...)

function bulkdownload(titles){
    titles = titles || [];
    if ( titles.length > 0 ) {
        var url = '/query/bulkdownload?';
        var len = titles.length;
        for ( var ii = 0; ii < len; ii++ ) {
            url = url + 'titles=' + titles[ii];
            if ( ii < len-1 ) {
                url = url + '&';
            }
        }
        $window.open(url);
    }
};

我只在IE11中测试过这个。

都博裕
2023-03-14

使用这个:

var url="YOUR ZIP URL HERE";
window.open(url, '_blank');
郗俊能
2023-03-14
var zip_file_path = "" //put inside "" your path with file.zip
var zip_file_name = "" //put inside "" file name or something
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = zip_file_path;
a.download = zip_file_name;
a.click();
document.body.removeChild(a);
 类似资料:
  • 在有人说“重复”之前,我只想确保大家知道,我已经回顾了这些问题: 1) 使用angular和php,不确定这里发生了什么(我不知道php):下载zip文件并从angular方法触发“保存文件”对话框 2) 什么都做不到:如何使用angular下载zip文件 3) 这个人已经可以下载了,这已经超过了我想弄明白的点:从一个按钮动作触发的角度下载外部zip文件 4) 这个问题没有答案:下载。nodejs

  • 我是stackoverflow的新手,因此这是我的第一篇文章。请原谅我英语不好。。。我花了几个小时在相关的话题上,但没有一个能满足我的需要。我正在编写一个通讯簿,我希望我的用户能够随时下载pdf联系人列表。一切似乎都很顺利,但实际上客户端从未下载pdf文件,尽管我可以在使用chrome开发者工具的请求中看到它。这是我的密码: 当检查响应时,我得到如下结果: 有没有人好心告诉我出了什么事?

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 我试图使用JAX-RS从REST服务下载一个文件。这是我的代码,它通过发送GET请求调用下载: 然而,我面临着将响应转换为实际文件对象的问题。所以我所做的是以下几点: 创建的文件无效,我调试了代码并注意到输出包含一个类似的字符串(大得多): Superstore.TWB YSI 7 D M 3 F 编辑:引用关于HTTP响应的REST API引用: 反应体 以下内容之一,具体取决于工作簿的格式:

  • 前面的章节介绍了所有 Redis 的重要功能组件: 数据结构、数据类型、事务、Lua 环境、事件处理、数据库、持久化, 等等, 但是我们还没有对 Redis 服务器本身做任何介绍。 不过, 服务器本身并没有多少需要介绍的新东西, 因为服务器除了维持服务器状态之外, 最重要的就是将前面介绍过的各个功能模块组合起来, 而这些功能模块在前面的章节里已经介绍过了, 所以本章将焦点放在服务器的初始化过程,

  • 问题内容: 如果我想在我的RMI应用程序中启用“双向”通信(即,允许服务器调用客户端上的方法,以及允许客户端调用服务器上的方法),则是使客户端成为还有远程课程吗? 另外,如果我打算将客户端的实例作为方法参数传递给服务器,我是否认为不需要在rmiregistry中添加“客户端类”是正确的吗? 最后一个问题,我所有的类是否仍需要在同一位置编译?IE可以在两台完全独立的计算机上编译服务器和客户端,并期望