【问题标题】:Need to ZIP the selected file from Client machine when uploading (using JSZIP) in .Net Web App. The zipped file should be uploaded to server location在 .Net Web App 中上传(使用 JSZIP)时,需要从客户端计算机压缩所选文件。压缩文件应上传到服务器位置
【发布时间】:2014-02-03 04:41:04
【问题描述】:

我是使用 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. 在此之后在服务器路径上上传。

谁能帮帮我?

【问题讨论】:

  • 为什么不使用 gzip 或 deflate?不需要额外的代码。这现在也适用于大多数客户端。
  • 我需要这样的东西-(Demo for JSZIP)....唯一的区别是我需要将文件上传到服务器而不是下载它们。

标签: javascript c#-4.0 jszip


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    一旦您的 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-05
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      相关资源
      最近更新 更多