Como posso obter um formulário da web ASP.net (v3.5) para postar um arquivo usando um simples e antigo <input type="file" />
?
Não estou interessado em usar o controle de servidor FileUpload do ASP.net.
asp.net
upload
file-upload
Ronnie Overby
fonte
fonte
runat="server"
, não é independente das coisas do servidor ASP.NETvar fileUploaded = document.getElementById("myFile").files[0];
e você pode até mesmo obter os bytes usandoreadAsArrayBuffer
: stackoverflow.com/questions/37134433/… - mas o que você vai fazer com todos esses bytes do lado do cliente? O OP deseja evitar completamente a comunicação do lado do servidor de controle e não do ASP .NET. -1 para você.Aqui está uma solução sem depender de nenhum controle do lado do servidor, assim como o OP descreveu na pergunta.
Código HTML do cliente:
Método Page_Load de upload.aspx:
fonte
Request.Files[0]
vez deRequest.Files["UploadedFile"]
e enquanto o OP estava usando ASP .NET puro e não MVC, se alguém quiser usar isso para MVC, você só precisa emHttpPostedFileBase
vez deHttpPostedFile
.Você terá que definir o
enctype
atributo deform
paramultipart/form-data
; então você pode acessar o arquivo carregado usando aHttpRequest.Files
coleção.fonte
use o controle HTML com um atributo de servidor runat
Então, em asp.net Codebehind
Existem também algumas opções de terceiros que mostrarão o progresso se você se interessar
fonte
<asp:FileUpload ID="fileUpload1" runat="server"></asp:FileUpload>
) Isso é diferente de dizer para não colocar umrunat=server
em uminput
campo.HtmlInputFile
controle.Sim, você pode conseguir isso pelo método de postagem Ajax. no lado do servidor, você pode usar httphandler. Portanto, não estamos usando nenhum controle de servidor de acordo com sua necessidade.
com ajax você também pode mostrar o progresso do upload.
você terá que ler o arquivo como um fluxo de entrada.
Código de amostra
fonte
fs.close()
todo o resto pode acabar em arquivos ilegíveis, já que eles permanecem abertos de alguma forma no IIS.A coleção Request.Files contém todos os arquivos carregados com o seu formulário, independentemente de serem provenientes de um controle FileUpload ou escrito manualmente
<input type="file">
.Portanto, você pode simplesmente escrever uma tag de entrada de arquivo simples e antiga no meio de seu formulário da Web e, em seguida, ler o arquivo carregado da coleção Request.Files.
fonte
Como outros já responderam, o Request.Files é um HttpFileCollection que contém todos os arquivos que foram postados, você só precisa pedir a esse objeto o arquivo assim:
Mas o que acontece quando há mais de uma marcação de entrada com o mesmo nome de atributo:
No lado do servidor, o código anterior Request.Files ["myFile"] retorna apenas um objeto HttpPostedFile em vez dos dois arquivos. Eu vi no .net 4.5 um método de extensão chamado GetMultiple, mas para as versões anteriores ele não existe, por isso proponho o método de extensão como:
Este método de extensão retornará todos os objetos HttpPostedFile que possuem o nome "myFiles" em HttpFileCollection, se houver.
fonte
Controle HtmlInputFile
Eu usei isso o tempo todo.
fonte
runat="server"
que essencialmente o transforma em um controle de servidor, que eles não queriam usar.Aqui está um artigo do Projeto de código com um projeto para download que pretende resolver isso. Isenção de responsabilidade: não testei este código. http://www.codeproject.com/KB/aspnet/fileupload.aspx
fonte
fonte