(Prefácio: esta pergunta é sobre o ASP.NET MVC 3.0, lançado em 2011 , não é sobre o ASP.NET Core 3.0, lançado em 2019)
Quero fazer upload de arquivo no asp.net mvc. Como posso fazer upload do arquivo usando o input file
controle html ?
c#
asp.net-mvc
asp.net-mvc-3
user637197
fonte
fonte
Respostas:
Você não usa um controle de entrada de arquivo. Os controles do lado do servidor não são usados no ASP.NET MVC. Confira a seguinte postagem no blog, que ilustra como fazer isso no ASP.NET MVC.
Então você começaria criando um formulário HTML que conteria uma entrada de arquivo:
e então você teria um controlador para lidar com o upload:
fonte
<httpRuntime maxRequestLength="x" />
no seu web.config, em que x é o número de KB permitido para upload.Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })
. Isso é útil se for uma visualização parcial que é chamada de várias visualizações pai (ou similar).transferir para
byte[]
(por exemplo, para salvar no DB):Para transferir o fluxo de entrada diretamente para o banco de dados, sem armazená-lo na memória, você pode usar esta classe retirada daqui e um pouco alterada:
e o uso:
fonte
using (MemoryStream ms = new MemoryStream()) { /* ... */ }
File.ReadAllBytes
Método alternativo para transferir para o byte [] (para salvar no DB).
O método do @ Arthur funciona muito bem, mas não copia perfeitamente, portanto, os documentos do MS Office podem falhar ao abrir após recuperá-los do banco de dados. MemoryStream.GetBuffer () pode retornar bytes vazios extras no final do byte [], mas você pode corrigi-lo usando MemoryStream.ToArray (). No entanto, eu encontrei esta alternativa para funcionar perfeitamente para todos os tipos de arquivo:
Aqui está o meu código completo:
Classe do documento:
Download do arquivo:
Upload de arquivo:
Visualização (snippet):
fonte
Muitas vezes, você também deseja passar um modelo de exibição, e não o único arquivo. No código abaixo, você encontrará outros recursos úteis:
Isso pode ser feito através do seguinte código:
Assegure-se de ter
na sua opinião, para erros de validação.
Lembre-se também de que o tamanho máximo padrão da solicitação é de 4 MB (maxRequestLength = 4096). Para fazer upload de arquivos maiores, é necessário alterar este parâmetro no web.config:
(40960 = 40 MB aqui).
Tempo limite de execução é o número inteiro de segundos. Você pode alterá-lo para permitir o upload de arquivos enormes.
fonte
Na visualização:
enquanto o seguinte código no controlador:
fonte
Eu tenho que fazer upload de arquivo em pedaços de 100 kb de arquivo e último do armazenamento de arquivo de upload no banco de dados usando o comando Espero que seja útil para você.
Javascript (Knockout Js)
Código HTML:
fonte
Como faço o meu é praticamente como acima mostrarei meu código e como usá-lo com um banco de dados MYSSQL ...
Tabela de documentos no DB -
int Id (PK), string Url, string Descrição, CreatedBy, TenancyId DateUploaded
O ID do código acima, sendo a chave Primária, o URL sendo o nome do arquivo (com o tipo de arquivo no final), a descrição do arquivo a ser visualizada na exibição dos documentos, CreatedBy quem enviou o arquivo, tenancyId, dateUploaded
dentro da visualização, você deve definir o enctype ou ele não funcionará corretamente.
O código acima dará a você o botão Procurar, então dentro do meu projeto eu tenho uma classe basicamente chamada IsValidImage que apenas verifica se o tamanho do arquivo está abaixo do tamanho máximo especificado, verifica se é um arquivo IMG, tudo isso em uma função bool de classe. Portanto, se true retorna true.
Então, no controlador:
fonte
fonte
Fornecendo solução completa
Primeiro use a entrada. CShtml na exibição do MVC
Agora ligue para o Ajax
Controlador Json Call
fonte
Estou dando a você o método simples e fácil de entender e aprender.
Primeiro, você deve escrever o seguinte código no seu arquivo .Cshtml .
em seguida, no seu controlador, coloque o seguinte código:
Para isso, você deve criar as camadas BAL e DAL conforme o seu banco de dados.
fonte
Aqui está o meu exemplo de trabalho:
fonte
preste atenção neste código apenas para upload de imagem . Eu uso HTMLHelper para fazer upload de imagem. no arquivo cshtml coloque esse código
crie uma tag HTMLHelper para upload
e finalmente em ação Carregue seu arquivo
fonte
fonte
upload de arquivo usando formdata
arquivo .cshtml
Código do lado do servidor
fonte
Maneira simples de salvar vários arquivos
cshtml
Controlador
fonte
Desde que eu encontrei o problema ao fazer upload de arquivo no navegador IE, sugiro lidar com isso dessa maneira.
Visão
Controlador
fonte
Html:
Código por trás:
fonte
Finalize minha solução
adicione essas funções ao seu
base controller
para que você possa usá-lasall controllers
check-out como usá-lo
e aqui está um exemplo completo
fonte
No controlador
Em vista
Classe Modal
Crie uma pasta como uploads na pasta Content no projeto
fonte
A maioria das respostas parece bastante legítima, embora eu tenha feito um projeto de amostra para você no donnetfiddle
Estou usando o LumenWorks.Framework para o trabalho CSV, mas não é obrigatório.
Demo
Visão
Controlador:
fonte
Eu enfrentei esse mesmo erro enquanto estou fazendo o conceito de upload de arquivos. Eu sei muitas respostas fornecidas pelos desenvolvedores para esta pergunta.
Mesmo que eu esteja respondendo a esta pergunta, recebi esse erro pelo erro desatento mencionado abaixo.
Ao fornecer o atributo name, verifique se o parâmetro do controlador também possui o mesmo valor de nome "uploadedFile". Como isso :
caso contrário, não será mapeado.
fonte