Si desea realizar la función de cargar cualquier cantidad de archivos, haga clic en un botón para agregar un cuadro de carga de archivos, que ya ha visto en el disco duro de la red. Sé cómo agregar cualquier control de carga de archivos usando JavaScript. El problema es que se agrega el control HTML y no sé cómo hacer que el lado del servidor obtenga el archivo.
Así que busqué en Google "carga de archivos múltiples en ASP.NET" y de hecho encontré un artículo titulado "Implementación de la carga de archivos múltiples en ASP.NET". El artículo se implementó en VB.NET y la función era exactamente la misma. Quería. Principalmente quiero ver cómo el servidor obtiene los archivos cargados por el cliente. Después de leer el código en el artículo, resulta que System.Web.HttpContext.Current.Request.Files contiene los archivos. subido por el navegador del cliente. Utilizo C#. Escribí un código simple, originalmente pensé que debería estar bien, pero inesperadamente, después de cargar 3 imágenes, System.Web.HttpContext.Current.Request.Files devolvió 0 formatos de archivo.
No sé por qué, pero miré el código. Es muy simple y no puede estar equivocado. Luego miré varios otros artículos en los resultados de búsqueda de Google y descubrí que el primer artículo que miré no era el. Trabajo original. Hay dos ejemplos del trabajo original en el sitio web del autor. Hay dos versiones, una es VB.NET y la otra es C#. Ahora no tengo que escribirlo yo mismo. local y ejecutarlo. Entonces, ¿por qué no funciona el código que escribí? Comparé repetidamente la diferencia entre mi código y el código del artículo, probé en varios lugares y finalmente descubrí que no tenía nada que ver con otros lugares. El motivo era <form id="form1" runat="server" enctype=". multipart/form-data"> atributo enctype, la página creada en VS 2005 no tiene este atributo, pero el artículo de ejemplo sí. Más tarde agregué enctype="multipart/form-data" y System.Web.HttpContext.Current.Request .Los archivos se convirtieron en La cantidad de archivos se puede obtener normalmente.
Probablemente las páginas creadas en VS 2003 tengan este atributo por defecto, de lo contrario el autor de un atributo tan importante lo habría mencionado en el artículo.
referirse a:
"Implementando múltiples cargas de archivos en ASP.NET"
El código de prueba que hice:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo._Default" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transicional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<lenguaje de escritura="JavaScript">
función agregarArchivo()
{
var str = '<tipo de entrada="archivo" tamaño="50" NOMBRE="Archivo">'
document.getElementById('MiArchivo').insertAdjacentHTML("beforeEnd",str)
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="servidor">
<título>Página sin título</título>
</cabeza>
<cuerpo>
<form id="form1" runat="servidor" enctype="multipart/form-data">
<tipo de entrada="botón" valor="Agregar" onclick="addFile()">
<input onclick="this.form.reset()" tipo="botón" valor="Restablecer(ReSet)">
<asp:Button Runat="servidor" Text="Cargar" ID="Cargar" OnClick="Upload_Click1" ></asp:Button>
<div id="MiArchivo">
<tipo de entrada="archivo" nombre="Archivo" />
</div>
</formulario>
</cuerpo>
</html>
usando Sistema;
usando System.Data;
usando System.Configuration;
usando System.Collections;
usando System.Web;
utilizando System.Web.Security;
utilizando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
la demostración del espacio de nombres
System.Web.UI.HtmlControls;
{
clase parcial pública _Default: System.Web.UI.Page
{
Page_Load vacío protegido (remitente del objeto, EventArgs e)
{
}
vacío protegido Upload_Click1 (remitente del objeto, EventArgs e)
{
HttpFileCollection _files = System.Web.HttpContext.Current.Request.Files
para (int i = 0; i < _files.Count; i++)
{
_files[i].SaveAs(Server.MapPath("~/Files/" + _files[i].FileName));
}
}
}
}
http://bg5sbk.cnblogs.com/archive/2006/06/11/mulitfileuploadtest.html