在.Net Web App中上传(使用JSZIP)时,需要从客户端计算机压缩所选文件。压缩文件应上传到服务器位置

时间:2014-01-14 22:13:52

标签: javascript c#-4.0 jszip

我是使用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&#39;选择的文件。
  2. 压缩并将文件保存在本地RAM或客户端计算机中。
  3. 在SERVER路径上在服务器上上传。
  4. 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分: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 ) {
    ...
});

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

答案 1 :(得分:0)

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

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

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

这一切都可以非常流畅地以流方式完成,但是要享受这一点,您需要绝对学习在JavaScript中使用连续传递样式编码,并且永远不要假设准备好处理数据的函数会同步返回。 (一个常见的初学者的错误,对于那些不完全将延续传球风格视为一个漂亮概念的人们来说,这是不断的痛苦。)

如果有任何兴趣/答复/评论/支持,我将返回并粘贴工作版本中的一些代码。