使用ajax发送类似数据的文件

时间:2014-09-22 06:55:44

标签: jquery asp.net ajax asp.net-mvc

我尝试使用ajax将数据发送到c#方法。我从input type=file

获取文件
var inp = document.getElementById('file');
var data = new FormData();

for (var i = 0; i < inp.files.length; ++i) {
   var somefile  = inp.files.item(i);
   //for is for later not have function right now!
}

$.ajax({
   url: "Main/Upload",
   type: "GET",
   data: {"file":somefile},
});

我写了c#方法:

public void Upload(HttpPostedFileWrapper file)
{
   ModelState.Clear();
   if (file != null)
   {
     if (file.ContentLength > 0)
     {
       var fileName = Path.GetFileName(file.FileName);
       var saveLocation = Path.Combine(Server.MapPath("~/tmp"), fileName);
       file.SaveAs(saveLocation);
     }
   }           
}

我不确定HttpPostedFileWrapper是否正确,但我尝试...使用[httpost]是个问题,因为水獭问题。

现在ajax呼叫不会调用上传。

我收到错误NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: Illegal operation on WrappedNative prototype object

我尝试在somefile中调试,我得到文件大小,名称,类型等。

我需要从输入中获取文件而不提交,我这样做,那部分工作,现在我只需要save file in save folder,也许我只能用jquery。

1 个答案:

答案 0 :(得分:1)

是的,你的ajax代码是错误的。

上述代码可以改写为

var inp = document.getElementById('file');
var data = new FormData();
data.append("fileInfo", inp);

/*
for (var i = 0; i < inp.files.length; ++i) {
   var somefile  = inp.files.item(i);
   //for is for later not have function right now!
}*/

$.ajax({
   url: "Main/Upload",
   type: "POST",
   data: data,
   success : function (data) {
      console.log("SUCCESS : ", data);
   },
   error : function () {
    console.log("ERROR");
   }
});