¿Cómo puedo obtener un formulario web ASP.net (v3.5) para publicar un archivo usando un viejo simple <input type="file" />
?
No estoy interesado en usar el control de servidor ASP.net FileUpload.
asp.net
upload
file-upload
Ronnie Overby
fuente
fuente
runat="server"
, no es independiente del servidor de ASP.NETvar fileUploaded = document.getElementById("myFile").files[0];
e incluso puede obtener los bytes usandoreadAsArrayBuffer
: stackoverflow.com/questions/37134433/… - pero ¿qué va a hacer con todos esos bytes del lado del cliente? El OP quiere evitar por completo el control ASP .NET, no la comunicación del lado del servidor. -1 para ti.Aquí hay una solución sin depender de ningún control del lado del servidor, tal como OP ha descrito en la pregunta.
Código HTML del lado del cliente:
Método Page_Load de upload.aspx:
fuente
Request.Files[0]
lugar deRequest.Files["UploadedFile"]
y mientras el OP estaba usando ASP .NET directo y no MVC, si alguien quiere usar esto para MVC, solo necesita enHttpPostedFileBase
lugar deHttpPostedFile
.Tendrá que establecer el
enctype
atributo deform
tomultipart/form-data
; luego puede acceder al archivo cargado usando laHttpRequest.Files
colección.fuente
usar el control HTML con un atributo de servidor runat
Luego, en asp.net Codebehind
También hay algunas opciones de terceros que mostrarán el progreso si está interesado
fuente
<asp:FileUpload ID="fileUpload1" runat="server"></asp:FileUpload>
) Eso es diferente a decir que no se ponga unrunat=server
en uninput
campo.HtmlInputFile
control.Sí, puede lograr esto mediante el método de publicación ajax. en el lado del servidor puede usar httphandler. Por lo tanto, no estamos utilizando ningún control de servidor según sus requisitos.
con ajax también puede mostrar el progreso de la carga.
tendrá que leer el archivo como inputstream.
Código de muestra
fuente
fs.close()
todo lo demás podría terminar en archivos ilegibles, ya que permanecen abiertos de alguna manera dentro de IIS.La colección Request.Files contiene todos los archivos cargados con su formulario, independientemente de si provienen de un control FileUpload o de un archivo
<input type="file">
.Por lo tanto, puede escribir una etiqueta de entrada de archivo simple y antigua en el medio de su WebForm y luego leer el archivo cargado desde la colección Request.Files.
fuente
Como otros han respondido, Request.Files es una HttpFileCollection que contiene todos los archivos que se publicaron, solo necesita pedirle a ese objeto el archivo de esta manera:
Pero, ¿qué sucede cuando hay más de un marcado de entrada con el mismo nombre de atributo?
En el lado del servidor, el código anterior Request.Files ["myFile"] solo devuelve un objeto HttpPostedFile en lugar de los dos archivos. He visto en .net 4.5 un método de extensión llamado GetMultiple pero para versiones anteriores no existe, para el caso propongo el método de extensión como:
Este método de extensión devolverá todos los objetos HttpPostedFile que tienen el nombre "myFiles" en HttpFileCollection si existe alguno.
fuente
Control HtmlInputFile
He usado esto todo el tiempo.
fuente
runat="server"
que esencialmente lo convierte en un control de servidor, que no querían usar.Aquí hay un artículo de Code Project con un proyecto descargable que pretende resolver esto. Descargo de responsabilidad: no he probado este código. http://www.codeproject.com/KB/aspnet/fileupload.aspx
fuente
fuente