1

我是使用 JSZIP 的新手,可能会问一个明显的问题。但这里有:

我正在使用文件上传控件将文件上传到服务器。源文件位于客户端的路径中。目标文件应该在服务器上。

<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>jszip demo</title>
        <script type="text/javascript" src="../Scripts/jszip.js"></script>
        <script type="text/javascript" src="../Scripts/jszip-load.js"></script>
        <script type="text/javascript" src="../Scripts/jszip-deflate.js"></script>
        <script type="text/javascript" src="../Scripts/jszip-inflate.js"></script>

        <script type="text/javascript">

            function zipFileAndUpload() 
            {
                var myFileUploadControl1 = document.getElementById('myFileUploadControl1');
                var FILENAMEABSOLUTE = myFileUploadControl1.value;

                var zip = new JSZip(FILENAMEABSOLUTE);
                zip.file(FILENAMEABSOLUTE);
                var content = zip.generate({ type: "blob" });
                //
                // Other Code Here
                //
            }

        </script>
    </head>
        <body>
            <form id="form1" runat="server">
                <asp:FileUpload ID="myFileUploadControl1" runat="server"/>
                <input type="button" value="Select File" onclick="zipFileAndUpload()"/>
            </form>
        </body>
        </html>

我的要求是,当客户端选择文件时,应该在 javascript 中使用 JSZIP 对其进行压缩,然后上传到服务器。

我试图找到解决方案,但一无所获。到目前为止,我尝试过的解决方案也没有奏效。

  1. 我需要读取“myFileUploadControl1”选择的客户端计算机上的文件。
  2. 压缩并将文件保存在本地 RAM 或客户端计算机中。
  3. 之后在服务器路径上上传。

谁能帮我?

4

2 回答 2

0

构建 zip 后,您可以使用 jQuery 将其发布到服务器,如下所示。

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

var formData = new FormData();
formData.append('zipData', zipData);

var postToServer = $.ajax({
    type: "POST",
    url: "Upload", // My server-side MVC controller has an action named Upload
    data: formData,
    processData: false,
    contentType: false,
});

postToServer.done(function () {
    ...
});

postToServer.fail(function( jqXHR, textStatus ) {
    ...
});

在服务器端,您将需要代码来接收数据流并使用您选择的任何服务器端技术将其保存在那里。

于 2014-08-31T00:48:11.793 回答
0

我现在没有时间发布我的确切代码,而且这个问题已经过时并且被遗弃了。

但是客户端上 ZIP 的好处确实是您可以将多个文件上传到一个文件中。这可能与 5 年前不同。但解决方案的概要是这样的:

  1. 您使用文件选择器对象来获取文件对象
  2. 您创建一个 JZIP 对象并使用 File 对象创建工作人员
  3. 最后,您通过将 zip 文件发送到 XHR 对象来提交它。

这一切都可以以流式方式非常巧妙地完成,但是为了享受这样做,您需要绝对学习在 JavaScript 中使用持续传递风格的编码,并且永远不要假设函数的同步返回与数据准备就绪。(一个常见的初学者错误,对于那些没有完全接受延续传递风格作为一个美丽概念的人来说,这是一个持续的痛苦。)

如果有任何兴趣/回复/评论/赞成,我会回来并从我的工作版本中粘贴一些代码。

于 2019-11-15T16:46:17.243 回答