2

我正在尝试使用 AJAX 将文件上传到 ASP.NET。我有这个 Javascript:

var xhr = new XMLHttpRequest();

for (var i = 0; i < files.length; i++) {
   xhr.open('post', '/File/Upload', true);
   xhr.setRequestHeader("Content-Type", "multipart/form-data");
   var formData = new FormData();
   formData.append("_file", files[i]);
   xhr.send(files[i]);
}

files是一个Array()

然后我尝试用 C# 代码访问 post 文件,但值始终是null. 我该如何解决这个问题?

// Method 1, Result: file = null
HttpPostedFileBase file = Request.Files["_file"];

// Method 2, Result: postedFile.Count = 0
HttpFileCollectionBase postedFile = Request.Files;
4

2 回答 2

3

假设您有以下包含文件输入字段的表单:

<form action="/home/index" method="post" enctype="multipart/form-data" onsubmit="return handleSubmit(this);">
    <input type="file" id="_file" name="_file" multiple="multiple" />
    <button type="submit">OK</button>
</form>

您可以尝试以下功能:

function handleSubmit(form) {
    if (!FormData) {
        alert('Sorry, your browser doesn\'t support the File API => falling back to normal form submit');
        return true;
    }

    var fd = new FormData();
    var file = document.getElementById('_file');
    for (var i = 0; i < file.files.length; i++) {
        fd.append('_file', file.files[i]);
    }

    var xhr = new XMLHttpRequest();
    xhr.open(form.method, form.action, true);
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
            alert(xhr.responseText);
        }
    };
    xhr.send(fd);

    return false;
}

现在在服务器上,您应该能够使用Request.Files.

于 2012-10-04T11:52:32.417 回答
0

你也可以使用 jQuery

你有 2 个函数
Ajax:http
://api.jquery.com/jQuery.ajax/ 加载(快捷方式,调用 ajax):http
://api.jquery.com/load/ 示例:http://www.w3schools。 com/jquery/jquery_ajax.asp

编辑时间:2012-10-04 16:31
原因:得到以下评论:
嗯,除非我不明白,我不想加载服务器的信息,我想获取信息我的服务器上有我的 JS 代码。我已经有了要在文件 Array() 中发送的信息。– 埃尔法耶

您所做的是对服务器进行 AJAX 调用,就像对 Web 服务一样。这是一个例子

var value = 1;
var handlerUrl = [YOUR WEBSERVICE URL];

//Do the Ajax Call
jQuery.ajax({
  url: handlerUrl,
  data: { "params[]": [value] },
  type: 'POST',
  success: function (data)
  {
     alert("succes");
  },
  error: function (jxhr, msg, err)
  {
     alert("error");
  }
});

在 data 参数中,您提供数据。
我以数组的形式在这里发送它,但您也可以像 1 参数一样发送它。在我的情况下,您如何访问它是一个通用处理程序。

//Split the parameters and set in Array of Strings
var param = context.Request.Form[0].Split(',');
var value = param[0];

就像我说的那样,我以数组的形式给出它,所以我只有一个参数
,然后我将它拆分。但是如果你给它一个单一的属性,那么你
可以得到它:

context.Request.Form[0]
context.Request.Form[1]
context.Request.Form[2]
context.Request.Form[3]
context.Request.Form[4]
于 2012-10-04T12:53:32.973 回答