Estou usando o asp.net mvc 4 webapi beta para criar um serviço de descanso. Preciso aceitar imagens / arquivos POST dos aplicativos clientes. Isso é possível usando o webapi? Abaixo está como ação eu estou usando atualmente. Alguém sabe de um exemplo como isso deve funcionar?
[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
Phil
fonte
fonte
Request.Files
Respostas:
consulte http://www.asp.net/web-api/overview/formats-and-model-binding/html-forms-and-multipart-mime#multipartmime , embora eu ache que o artigo o faça parecer um pouco mais complicado do que é realmente.
Basicamente,
fonte
MultipartFormDataStreamProvider
não expõe mais aBodyPartFileNames
propriedade, eu useiFileData.First().LocalFileName
.Estou surpreso que muitos de vocês parecem querer salvar arquivos no servidor. A solução para manter tudo na memória é a seguinte:
fonte
File.WriteAllBytes(filename, buffer);
escrevê-lo em um arquivoVeja o código abaixo, adaptado deste artigo , que demonstra o código de exemplo mais simples que eu poderia encontrar. Inclui uploads de arquivos e de memória (mais rápidos).
fonte
A maneira do ASP.NET Core agora está aqui :
fonte
Aqui está uma solução rápida e suja que pega o conteúdo do arquivo carregado do corpo HTTP e o grava em um arquivo. Incluí um snippet HTML / JS "básico" para o upload do arquivo.
Método da API da Web:
Upload de arquivo HTML:
fonte
Usei a resposta de Mike Wasson antes de atualizar todos os NuGets no meu projeto webapi mvc4. Depois disso, tive que reescrever a ação de upload do arquivo:
Aparentemente, BodyPartFileNames não está mais disponível no MultipartFormDataStreamProvider.
fonte
ReadAsMultipartAsync
e ii) InFile.Move
? 2) você poderia fazerasync File.Move
?Na mesma direção, estou postando um snippets de cliente e servidor que enviam arquivos do Excel usando o WebApi, c # 4:
E o servidor webapi controller:
E o MyMultipartFormDataStreamProvider personalizado, necessário para personalizar o nome do arquivo:
PS: peguei esse código em outra postagem http://www.codeguru.com/csharp/.net/uploading-files-asynchronously-using-asp-asp.net-web-api .htm
fonte
static method SetFile
no seu Controller?path
armazenamento em nuvem, ou seja.fonte
Aqui estão duas maneiras de aceitar um arquivo. Um usando no provedor de memória MultipartMemoryStreamProvider e outro usando MultipartFormDataStreamProvider, que salva em um disco. Observe que isso é apenas para um upload de arquivo por vez. Você pode estender isso com certeza para salvar vários arquivos. A segunda abordagem pode suportar arquivos grandes. Eu testei arquivos com mais de 200 MB e funciona bem. O uso da abordagem de memória não exige que você salve no disco, mas emitirá uma exceção de falta de memória se você exceder um determinado limite.
fonte
Eu tive um problema semelhante na API da Web de visualização. Ainda não portou essa parte para a nova API da Web MVC 4, mas talvez isso ajude:
Upload de arquivo REST com HttpRequestMessage ou Stream?
Informe-me, pode sentar-se amanhã e tentar implementá-lo novamente.
fonte
Esta pergunta tem muitas boas respostas, mesmo para o .Net Core. Eu estava usando os dois frameworks, os exemplos de código fornecidos funcionam bem. Então não vou repetir. No meu caso, o importante era como usar as ações de upload de arquivos com o Swagger assim:
Aqui está o meu resumo:
ASP .Net WebAPI 2
.NET Core
fonte
Controlador de API:
fonte
Complementando a resposta de Matt Frear - Essa seria uma alternativa do ASP NET Core para ler o arquivo diretamente do Stream, sem salvá-lo e lê-lo a partir do disco:
fonte