Я использую asp.net mvc 4 webapi beta для создания сервиса отдыха. Мне нужно иметь возможность принимать POSTed изображения / файлы из клиентских приложений. Возможно ли это с помощью вебапи? Ниже описано, как я сейчас использую действие. Кто-нибудь знает пример, как это должно работать?
[HttpPost]
public string ProfileImagePost(HttpPostedFile profileImage)
{
string[] extensions = { ".jpg", ".jpeg", ".gif", ".bmp", ".png" };
if (!extensions.Any(x => x.Equals(Path.GetExtension(profileImage.FileName.ToLower()), StringComparison.OrdinalIgnoreCase)))
{
throw new HttpResponseException("Invalid file type.", HttpStatusCode.BadRequest);
}
// Other code goes here
return "/path/to/image.png";
}
c#
asp.net-mvc-4
Фил
источник
источник
Request.Files
Ответы:
см. http://www.asp.net/web-api/overview/formats-and-model-binding/html-forms-and-multipart-mime#multipartmime , хотя я думаю, что в статье это выглядит немного сложнее, чем это действительно так.
В принципе,
источник
MultipartFormDataStreamProvider
больше не выставляетBodyPartFileNames
собственность, я использовалFileData.First().LocalFileName
вместо этого.Я удивлен, что многие из вас хотят сохранить файлы на сервере. Решение сохранить все в памяти выглядит следующим образом:
источник
File.WriteAllBytes(filename, buffer);
чтобы записать это в файлПосмотрите код ниже, адаптированный из этой статьи , который демонстрирует самый простой пример кода, который я мог найти. Он включает в себя как файлы, так и память (быстрее) загрузки.
источник
Основной способ ASP.NET теперь здесь :
источник
Вот быстрое и грязное решение, которое берет загруженное содержимое файла из тела HTTP и записывает его в файл. Я добавил фрагмент HTML / JS "голыми костями" для загрузки файла.
Метод веб-API:
Загрузка файла HTML:
источник
Я использовал ответ Майка Уоссона, прежде чем обновил все NuGets в своем проекте webapi mvc4. После этого мне пришлось переписать действие загрузки файла:
Очевидно, BodyPartFileNames больше не доступен в MultipartFormDataStreamProvider.
источник
ReadAsMultipartAsync
и ii) вFile.Move
? 2) Не могли бы вы сделатьasync File.Move
?В этом же направлении я публикую фрагменты клиента и сервера, которые отправляют файлы Excel с помощью WebApi, c # 4:
И серверный контроллер webapi:
И пользовательский MyMultipartFormDataStreamProvider, необходимый для настройки имени файла:
PS: я взял этот код из другого поста http://www.codeguru.com/csharp/.net/uploading-files-asynchronously-using-asp.net-web-api .htm
источник
static method SetFile
в вашем контроллере?path
облачное хранилище.источник
Вот два способа принять файл. Один использует в памяти провайдера MultipartMemoryStreamProvider, а другой использует MultipartFormDataStreamProvider, который сохраняет на диск. Обратите внимание, это только для одной загрузки файла за раз. Вы можете наверняка расширить это, чтобы сохранить несколько файлов. Второй подход может поддерживать большие файлы. Я проверил файлы размером более 200 МБ, и он отлично работает. Использование в памяти не требует сохранения на диск, но выдает исключение из памяти, если вы превысите определенный лимит.
источник
У меня была похожая проблема для предварительного просмотра веб-API. Еще не перенес эту часть в новый веб-API MVC 4, но, возможно, это поможет:
Загрузка файла REST с помощью HttpRequestMessage или Stream?
Пожалуйста, дайте мне знать, можете сесть завтра и попытаться реализовать это снова.
источник
На этот вопрос есть много хороших ответов даже для .Net Core. Я использовал обе платформы, предоставленные примеры кода работают нормально. Поэтому я не буду повторять это. В моем случае важно было использовать действия загрузки файла с Swagger следующим образом:
Вот мое резюме:
ASP .Net WebAPI 2
.NET Core
источник
Контроллер API:
источник
Дополняя ответ Мэтта Фреара - это будет альтернатива ASP NET Core для чтения файла непосредственно из Stream без сохранения и чтения с диска:
источник