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

How can I add a callback with form element for a file upload using javascript and Httphandler

本文关键字:添加 表单 元素 回调 javascript 何使用 Httphandler 文件      更新时间:2023-09-26

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

谢谢

不能将文件对象传递给服务器。相反,您应该将文件上载到服务器,然后服务器解压缩文件并在会话或数据库中设置一个标志,指示文件已处理。同时,您可以向服务器循环 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;
             }
            }
        });
}