2016-05-02 3 views
0

Я пробовал это уже пару часов, не делая никаких успехов. Вот проблема: я пытаюсь загрузить файл с помощью jquery ajax. На стороне клиента, кажется, отлично, когда я отлаживаю: я могу видеть объект файла, его имя, его размер и т. Д.загрузка файла с помощью jquery ajax - null issue

На стороне сервера запрос HttpPostedFileBase всегда равен нулю. Ниже приведен код:

//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); 
} 

EDIT: Я выяснил проблему. Метод 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); 
     } 
+0

Вы должны использовать 'FormData', и отсутствуют некоторые АЯКС варианты - см [это ответ] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) –

+0

@StephenMuecke Я пробовал подход FormData, но для меня это не сработало: var formData = new FormData(); formData.append (e.target.files [0]) ;. Можете ли вы объяснить, зачем мне это нужно? Похоже, что запрос выполняется через клиентскую сторону, только серверный сервер получает нулевой объект. – Riz

+0

Вы не можете отправлять файлы с помощью ajax, если вы не используете 'FormData'. Подробнее [info here] (https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects) –

ответ

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 
}); 

}

+0

привет @ araad1992, я пробовал подход FormData, но это не сработало для меня. Не могли бы вы показать мне, как выглядит ваша форма и управление входным файлом? – Riz

Смежные вопросы