【问题标题】:Ajax File Upload Handler always zero on requestAjax 文件上传处理程序在请求时始终为零
【发布时间】:2018-08-04 13:29:31
【问题描述】:

我一直在使用 webforms 上的处理程序(.ashx)通过 ajax 上传文件,在处理程序上检索文件数据时遇到了一些麻烦

下面是我的javascript代码

 $('#myImageButton').change(function (e) {

    debugger;

    var filename = $(this).val();
    var lastIndex = filename.lastIndexOf("\\");
    if (lastIndex >= 0) {
        filename = filename.substring(lastIndex + 1);
    }

    var fileUpload = $("#myImageButton").get(0);
    var files = fileUpload.files;

    var data = new FormData();
    for (var i = 0; i < files.length; i++) {
        data.append(files[i].name, files[i]);
    }

    $.ajax({
        type: 'POST',
        url: 'FileUploadHandler.ashx',
        contentType: false,
        processData: false,
        data: "{ 'context': '" + data + "', 'flag': 'some_flag_here' }",
        success: function (msg) {
            alert(msg);
            $('#tbImagePath2').val(filename);
        },
        error: function (xhr, status, error) {
            debugger;
            var err = eval("(" + xhr.responseText + ")");
            alert(err.Message);
        }
    });
});

我检查了我的 javascript 代码,代码中没有任何错误。 文件数据已填写,没有任何错误

问题是当它调用处理程序(我的 ashx 文件)中的方法时,它在方法开始处遇到断点,这里是处理程序方法

public void ProcessRequest(HttpContext context)
    {
        if (context.Request.Files.Count > 0)
        {
            HttpFileCollection files = context.Request.Files;
            string flag = context.Request["flag"].ToString();
            string fname = String.Empty;

            for (int i = 0; i < files.Count; i++)
            {
                HttpPostedFile file = files[i];
                fname = context.Server.MapPath("~/Images/" + file.FileName);
                file.SaveAs(fname);

                switch (flag)
                {
                    //some stuff here
                }
            }
        }
        //context.Response.ContentType = "text/plain";
        //context.Response.Write("File(s) Uploaded Successfully!");
    }

问题是上传的文件没有记录在上下文请求中,好像文件本身没有发送到处理程序来处理(计数始终为零)

在 ajax 上声明的标志也没有记录在上下文请求中

那么,如何使请求中可以读取图像/文件和标志?

问候

普通人

【问题讨论】:

  • 在您的 jquery 代码中,您是否尝试过设置这样的数据 data:data 而不是将其设置为 json 字符串 { 'context': '" + data + "', 'flag': 'some_flag_here' }

标签: asp.net ajax asp.net-ajax jquery-file-upload ashx


【解决方案1】:

您在 ajax 发布配置中设置“数据”选项的方式似乎很奇怪。另外,尝试将您的“标志”也添加到表单数据中。

尝试一下:

  //...after adding your file(s)
  data.append('flag','some_flag_here');

  $.ajax({
    url  : 'FileUploadHandler.ashx',
    type : 'POST',
    data : data,
    contentType : false,
    processData : false,
    //...etc
  });

另一个小伙伴也有同样的问题,你可以see his solution here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-24
    • 2013-02-19
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多