Я пытаюсь загрузить файл из AngularJS в ASP.NET WebAPI. По какой-то причине он отклоняется WebAPI с кодом статуса 404. Вот код:Угловая многоформатная форма data upload webapi 404
Угловая JS:
function upload(file, assessmentId, progressCallback) {
var formData = new FormData();
formData.append('file', file, file.name);
formData.append('assessmentId', assessmentId);
// post the file
return $http({
data: formData,
headers: { 'Content-Type': undefined },
method: 'POST',
url: _api('api/video/upload')
});
}
Также пробовал:
function upload(file, assessmentId, progressCallback) {
var formData = new FormData();
formData.append('file', file, file.name);
formData.append('assessmentId', assessmentId);
return $http.post(_api('api/video/upload'), formData, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
});
}
C# WebAPI:
[HttpPost]
[Route("api/video/upload")]
public async Task<IHttpActionResult> Upload()
{
if (!Request.Content.IsMimeMultipartContent("form-data"))
return StatusCode(HttpStatusCode.UnsupportedMediaType);
/* do stuff */
return Ok(new { test = "ing" });
}
Если я закомментировать formData.append('file', file, file.name);
так только прилагая assessmentId
, WebAPI принимает запрос.
file
был из элемента управления загрузкой файла HTML: element[0].files[0]
. Интересно, является ли это ошибкой?
Еще одна вещь, которую следует отметить в консоли разработчика Chrome, после ошибки 404 POST, есть ошибка CORS по тому же запросу. Я видел это раньше, когда WebApi терпит неудачу, но я не думаю, что на самом деле есть ошибка CORS, потому что она работает, когда я исключаю файл из запроса.
Обновление
Участок сгущается. Он отлично работает с небольшими файлами (несколько МБ). Если я загружаю файл размером 27 МБ, я получаю ошибку 500 с указанием «Максимальная длина запроса превышена». Большой! Как-то. Но если я загружу 56-мегабайтный файл, я получаю код статуса 404. Что тут происходит?
С следующей конфигурации, файл 27Мб работает, но файл 56MB еще возвращает 404.
<location path="api/video/upload">
<system.web>
<httpRuntime executionTimeout="86400" maxRequestLength="4194304" />
</system.web>
</location>
Вы пробовали с помощью директив файла закачивать из AngularJs –
@RohanKawade нет, но я использовал этот же код в другом месте (с угловой Audio Recorder) и она отлично работает. –
@RohanKawade Однако я использую директиву, полученную из [здесь] (https://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs) для привязки входного элемента. –