使用jquery ajax上传文件 - null问题

时间:2016-05-02 22:35:56

标签: jquery ajax asp.net-mvc asyncfileupload

我现在已经尝试了几个小时而没有取得任何进展。这是问题:我正在尝试使用jquery ajax上传文件。在客户端,我调试时看起来很好:我可以看到文件对象,它的名称,大小等。

在服务器端,HttpPostedFileBase请求始终为null。以下是代码:

    //client side    
    <input type="file" style="visibility:hidden; height:0; width:0;" id="taskFileUpload"/>

    //triggered by file input change event
    var uploadFile = function (model, e) {
     fileUploadRequest('api/uploadFile',e.target.files[0]);
    }

   //so far seems good when debugging    
    var fileUploadRequest = function (url, file) {
             $.ajax({
                 url: url,
                 type: "POST",
                 data: file,
                 processData: false
             });


 //server side - request is always null!
 [AcceptVerbs("Post")]
 [AllowAnonymous]
 public HttpResponseMessage uploadFile(HttpPostedFileBase request)
 {
    return Request.CreateResponse(HttpStatusCode.OK, request);
 }
编辑:我发现了问题。由于不同原因,下面建议的FormData方法对我不起作用:错误415媒体类型不受支持。这与.Net不知道如何绑定到HttpPostedFileBase对象有关。所以我做了以下工作,似乎有效:

public HttpResponseMessage uploadFile()
        {
            var file = HttpContext.Current.Request.Files.Count > 0 ?
                HttpContext.Current.Request.Files[0] : null;
            return Request.CreateResponse(HttpStatusCode.OK);
        }

1 个答案:

答案 0 :(得分:0)

显示此示例

function subirArchivo() {
var data = new FormData();
var files = $("#fuArchivo").get(0).files;
// Si se tiene archivo se va a guardar
if (files.length > 0) {
    data.append("Archivo", files[0]);
}
var ruta = '';
// Make Ajax request with the contentType = false, and procesDate = false
var ajaxRequest = $.ajax({
    type: "POST",
    url: "../ServicioValidaciones.asmx/subirArchivo",
    contentType: false,
    processData: false,
    data: data,
    success: function (result) {
        ruta = result;
    },
});
ajaxRequest.done(function (xhr, textStatus) {
// Make Ajax request with the contentType = false, and procesDate = false
});

}