在.Net Web应用程序中上传(使用JSZIP)时,需要从客户端机器对所选文件进行ZIP.压缩后的文件应上传到服务器位



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

有人能帮我吗?

一旦构建了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 ) {
...
});

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

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

但ZIP在客户端上的好处实际上是您可以在一个文件中上传多个文件。5年前情况可能有所不同。但解决方案的大纲是:

  1. 使用文件选择器对象来获取文件对象
  2. 创建JZIP对象,然后使用File对象创建辅助对象
  3. 最后,您通过将zip文件发送到XHR对象来提交它

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

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

最新更新