Я пробовал это уже пару часов, не делая никаких успехов. Вот проблема: я пытаюсь загрузить файл с помощью 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);
}
Вы должны использовать 'FormData', и отсутствуют некоторые АЯКС варианты - см [это ответ] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) –
@StephenMuecke Я пробовал подход FormData, но для меня это не сработало: var formData = new FormData(); formData.append (e.target.files [0]) ;. Можете ли вы объяснить, зачем мне это нужно? Похоже, что запрос выполняется через клиентскую сторону, только серверный сервер получает нулевой объект. – Riz
Вы не можете отправлять файлы с помощью ajax, если вы не используете 'FormData'. Подробнее [info here] (https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects) –