C# 如何使用AJAX将文件上载到ASP.NET?
我正在尝试使用AJAX将文件上载到ASP.NET。我有一个Javascript:C# 如何使用AJAX将文件上载到ASP.NET?,c#,xmlhttprequest,C#,Xmlhttprequest,我正在尝试使用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 For
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]);
}
假设您具有包含文件输入字段的以下表单:
<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;
}
函数handleSubmit(表单){
如果(!FormData){
警报('抱歉,您的浏览器不支持文件API=>返回正常表单提交');
返回true;
}
var fd=新FormData();
var file=document.getElementById(“U文件”);
对于(var i=0;i
现在,在服务器上,您应该能够使用
请求来检索文件。Files
您也可以使用jQuery您有两个功能
Ajax:
加载(快捷方式,调用ajax):
示例:
编辑:2012-10-04 16:31
原因:得到以下评论:
嗯,除非我不明白,否则我不想加载服务器的信息,我想获取服务器上JS代码中的信息。我已经在文件数组()中有了要发送的信息小精灵 您要做的是对服务器进行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");
}
});
在数据参数中,您可以提供数据我以数组的形式发送它,但您也可以像发送1个参数一样发送它。 在我的例子中,如何访问它
//Split the parameters and set in Array of Strings
var param = context.Request.Form[0].Split(',');
var value = param[0];
就像我说的,我以数组的形式给出它,所以我只有一个参数然后我把它分开。但是如果你想给它单一的属性,那么你
可以得到如下结果:
你有什么例外吗?没有,没有错误,没有例外。我看到了:是的,这是在使用HTML5文件API。你说的文件API是什么意思?你是说浏览按钮?对不起,我误解了你的问题。您已经在使用文件API。我已经更新了我的答案来展示一个例子。我不知道它是否改变了什么,但我的表单没有使用HTML。我使用带有文件字段的sencha表单打开浏览窗口并获取文件。这是filefield文档,请参阅实时预览:嗯,除非我不明白,否则我不想加载服务器的信息,我想获取服务器上JS代码中的信息。我已经在
文件数组()中有了要发送的信息。很有趣!但是我怎样才能发送一个对象呢?因为文件是对象的数组(),每个对象都包含文件的信息。如果我这样做:data:{“params[]”:[files[I]]},
我得到:value=[Object File]
。然后,我已经有了一个可以处理单个文件上传的上传方法(我正在进行多文件上传)。如果我可以得到一个HttpPostedFile
或者(当然)可能是HttpPostedFileBase
,那么这个方法目前就可以工作了。。。我从来没试过。但是做了一点谷歌搜索,这似乎是不可能的。您必须使用文件上载控件。在这里查看更多信息:通过谷歌搜索找到了一个可能的解决方案:(这是一个PHP教程)
context.Request.Form[0]
context.Request.Form[1]
context.Request.Form[2]
context.Request.Form[3]
context.Request.Form[4]