0

我正在尝试在服务器上上传一个 zip 文件,在那里解压缩并将文件名返回给客户端。

代码:

 <form id="frmUpload" action="UploadHandler.ashx" method="post">
        <input id="fileUpload" name="fileToUpload" type="file" accept=".zip"/> 
        <input id="btnUpload" type="submit" value="Submit" />
       </form>

服务器代码:

   public void ProcessRequest (HttpContext context)
{
    var uploadedFile=context.Request.Files["fileToUpload"];
    //uploadedFile is then unzipped, filenames are extracted and put in a string 
    // filenames="a,b,c";
    context.Response.Write(filenames);
    }

我想在客户端有一个回调函数,我可以访问它。

我尝试了第二种方法:

  $("#frmUpload").submit(function (evt) {
           // evt.preventDefault();
            //var data = $("#frmUpload")[0].serialize(); // returning empty string
            var form = $("#frmUpload")[0];
            var file = form["fileToUpload"].value;

            $.ajax({
                type: "POST",
                url: "UploadHandler.ashx",
                data: "file="+file,
                success: function (result, status, respObj) {

                    alert(result);
                }
            });
    })

但是,在这种情况下,成功回调正在执行,在服务器上我没有文件对象,因为传递给服务器的数据只是 zip 文件的路径。如何将文件对象传递给服务器?

谢谢

4

1 回答 1

0

您不能将文件对象传递给服务器。相反,您应该将文件上传到服务器,然后服务器解压缩文件并在会话或数据库中设置一个标志,指示该文件已被处理。同时,您可以将 ajax 请求循环到请求文件状态的服务器。 像这样的东西

var i=0;
for(;;){
if(i==1) return;
 $.ajax({
            type: "POST",
            url: "UploadHandler.ashx",
            data: "file="+file,
            success: function (result, status, respObj) {
                if(result){
                alert(result);
                i = 1;
             }
            }
        });
}
于 2013-09-26T07:55:46.467 回答