如何使用javascript和Httphandler为文件上传添加带有表单元素的回调

时间:2013-09-26 07:35:41

标签: javascript html httphandler

我试图在服务器上传一个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文件的路径。如何将文件对象传递给服务器?

由于

1 个答案:

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