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

无法打开从Flask发送的zip文件

东方飞捷
2023-03-14

我的服务器中有一个zip文件,我想为用户创建一个下载按钮,下面是我的代码:

@app.route("/profile", methods=["GET", "POST"])
def profile():

if request.method == "GET":

    return render_template("profile.html")

if request.method == "POST":

    #Some code

    return send_file(f"user_projects/delivery.zip")

下面是我的JS代码:

xhr.onreadystatechange = function () {
    
    if (this.readyState == 4 && this.status == 200) {     

        if (something) {
            some code
        }
        else {                        
            var zipFile = new Blob([this.response])               
            var url = URL.createObjectURL(zipFile)
     
            downloadLink.href = url;            
        }
    }
}

当我单击“a”元素(downloadLink)时,我可以下载zip文件,但当我尝试打开它时,我会收到一个错误,上面写着:

错误:不是存档警告:标题错误

从服务器的zip文件是100%罚款,我可以打开它没有任何问题,问题是当我从我的网站下载它,所以我认为有一些我是理所当然的。任何帮助都很感激,谢谢。

共有1个答案

米迪
2023-03-14

我根据这个答案解决了这个问题,现在我可以下载zip文件,只是为了记录:

我修改了服务器代码,必须以二进制格式打开文件,并将其编码为bas64:

with open(f"user_projects/delivery.zip", mode="rb") as binaryFile:
        binaryFile = binaryFile.read()
        archivoEnBase64 = base64.b64encode(binaryFile)

return archivoEnBase64

以下是修改后的JS代码

var zipFile = new Blob([atob(this.response)], {"type": "application/zip"})               
            var url = URL.createObjectURL(zipFile)

            downloadLink.href = "data:application/zip;base64," + this.response;

请求-响应是一个字节字符串,因此我使用atob()对其进行解码,href属性使用数据URI方案:

数据:[媒体类型][;base64],数据

 类似资料:
  • 我跟随了几篇文章,使用javaclass创建了一个zip文件。拉链已创建,但我无法打开它。在我的Mac电脑上,当我用命令打开它时,我收到了这条消息: 找不到中央目录签名的结尾。此文件不是zipfile,或者它构成多部分存档的一个磁盘。在后一种情况下,将在此存档的最后一个磁盘上找到中心目录和zipfile注释。 解压:在/Users/xxxx/Downloads/iad之一中找不到zipfile目录

  • 问题内容: 我有一个Flask服务器,它从数据库中获取几个不同文件的二进制数据,并将它们放入python’zipfile’对象中。我想使用flask的“ send_file”方法将生成的zip文件与我的代码一起发送。 我最初能够通过使用BytesIO(bin)作为send_file的第一个参数来成功发送非zip文件,但是由于某些原因,我无法对生成的zip文件执行相同的操作。它给出了错误: ‘Zip

  • 我正在使用DocuSign。Net客户端发送文档。 发送的简单场景工作正常-收件人接收发送的文档,我可以从DocuSign管理选项卡打开它们。 但是,当我试图以发件人身份代表其他电子邮件发送文档时,问题是,文档可以发送给收件人(使用正确的发件人电子邮件),但我无法在“文档管理”选项卡中打开(甚至无法看到)此文档和信函。 (在“报告”选项卡中显示,但与其他选项卡不同-它没有要打开的链接) 问:这种行

  • 我试图弄清楚如何从给定的文件夹路径创建新的zip文件,并将其发送回发件人。 需要的是,该文件将在请求它的发件人处下载。我已经看到了很多答案,但没有一个能帮我找到准确的答案。 我的代码: Guid folderGuid=Guid。NewGuid();string folderToZip=ConfigurationManager。AppSettings[“folderToZip”]folderGuid

  • 问题内容: 我编写了一个小模块,该模块首先在目录中找到所有文件,然后合并它们。但是,从目录打开这些文件时遇到问题。我确保我的文件和目录名称正确,并且文件实际上在目录中。 下面是代码。 下面是错误。 问题答案: listdir仅返回文件名:https ://docs.python.org/2/library/os.html#os.listdir您需要完整路径才能打开文件。在打开文件之前,还要检查以确

  • 我有一个错误:PHP无法打开流:打开的文件太多。 我在这里查看了stackoverflow的各种答案,但我无法解决这个问题。我主要尝试增加最大打开文件数的限制: 我已编辑/等/安全/限制。conf,其中我指定了: 保存并注销/重新启动该框后,命令: 仍打印出1024个。我不知道为什么这没有效果,我想这就是我得到php错误的原因。如果需要,我可以粘贴整个文件或任何其他配置文件。我使用的是PHP 5.