xmlHttpRequest无法使用chrome

时间:2013-12-23 10:39:20

标签: c# javascript asp.net google-chrome xmlhttprequest

我有以下代码用于上传文件:

    var formData = new FormData();
    var file = document.getElementById("file").files[0];
    formData.append("file", file);

    var xhr = new XMLHttpRequest();
    xhr.open("POST", "UploadFileServer.axd", false);
    xhr.setRequestHeader("Content-Type", "multipart/form-data");  
    xhr.setRequestHeader("Pragma", "no-cache");
    xhr.setRequestHeader("Cache-Control", "no-cache, must-revalidate");

    xhr.addEventListener('readystatechange', function(e) {
        if (this.readyState === 4) {
            if (this.status == 200 && this.response != null) {
                var clientResponse = JSON.parse(this.response);
                if (clientResponse.Success) {
                          //alert 1
                }

                else if (!clientResponse.Success) {
                          //alert 2
                }

                else {
                    //SOME ERROR!
                }
            }
        }
    });

    xhr.send(formData);

使用IE10一切正常。 使用Chrome,我在服务器端没有文件:

UploadFileServer.axd:

void IHttpHandler.ProcessRequest(HttpContext ctx)
{
    OutputDebugString("Enter process req");

    HttpFileCollection uploadFile = ctx.Request.Files;
    if (uploadFile.Count > 0)
    {
         //do something

        ctx.Response.ContentType = "application/json; charset=utf-8";
        ctx.Response.Write(uploadFileResponse);
    }
}

UploadFile.Count = 0

任何想法为什么它是空的?

1 个答案:

答案 0 :(得分:0)

在某些浏览器中,使用xmlHttpRequest时,上传的文件不会到达Request.Files集合中的服务器,而是在请求正文中。

我会建议像:

if (Request.Files.AllKeys.Any())
     {
        var key = Request.Files.AllKeys.First();
        fullSizeImage = new WebImage(Request.Files[key].InputStream);
      }
      else
      {
         fullSizeImage = new WebImage(Request.InputStream);
      }

或者你想对图像做什么:)