c# - subir - webform upload file
FileUpload Contol no muestra los archivos publicados (3)
Estoy intentando subir varios archivos en una página aspx usando un control FileUpload
. Establecí el control para permitir múltiples archivos:
<asp:FileUpload ID="fuAttach" Multiple="Multiple" runat="server" Visible="False" />
Ahora, al hacer clic en un botón, quiero tomar los datos de cada uno de estos archivos y guardarlos en una base de datos (usando un servicio REST, pero eso no es importante en este momento). De acuerdo con Visual Studio, puedo acceder a la propiedad PostedFile
, pero no a la propiedad FileUpload
control FileUpload
.
''System.Web.UI.WebControls.FileUpload'' does not contain a definition for ''PostedFiles'' and no extension method ''PostedFiles'' accepting a first argument of type ''System.Web.UI.WebControls.FileUpload'' could be found (are you missing a using directive or an assembly reference?)
Al depurar, sin embargo, la propiedad de PostedFiles
es visible y contiene todos mis archivos:
Además, traté de usar Request.Files, pero esto solo me da la identificación del control FileUpload
:
Además, mirando el control FileUpload
, no hay PostedFiles
:
public class FileUpload : WebControl
{
public FileUpload();
public byte[] FileBytes { get; }
public Stream FileContent { get; }
public string FileName { get; }
public bool HasFile { get; }
public HttpPostedFile PostedFile { get; }
protected override void AddAttributesToRender(HtmlTextWriter writer);
protected internal override void OnPreRender(EventArgs e);
protected internal override void Render(HtmlTextWriter writer);
public void SaveAs(string filename);
}
¿Me estoy perdiendo de algo?
Debería ser algo como esto:
<asp:FileUpload runat="server" ID="UploadImages" AllowMultiple="true" />
El código html será así:
<div>
<asp:FileUpload runat="server" ID="UploadImages" AllowMultiple="true" />
<asp:Button runat="server" ID="uploadedFile" Text="Upload" OnClick="uploadFile_Click" />
<asp:Label ID="listofuploadedfiles" runat="server" />
</div>
código detrás del botón de carga:
protected void uploadFile_Click(object sender, EventArgs e)
{
if (UploadImages.HasFiles)
{
foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles)
{
uploadedFile.SaveAs(System.IO.Path.Combine(Server.MapPath("~/Images/"),
uploadedFile.FileName)); listofuploadedfiles.Text += String.Format("{0}<br />", uploadedFile.FileName);
}
}
}
Probablemente llegue demasiado tarde, pero ya que estoy teniendo el mismo problema. Decido publicar mi respuesta aquí para los futuros buscadores de respuestas. Tengo que usar un walk-around para abordar este problema.
dynamic fileUploadControl = fileUpload1;
foreach(var file in fileUploadControl.PostedFiles)
{//do things here}
la conversión de su archivoUpload userControl a un objeto dinámico le permitirá omitir la comprobación de errores de tiempo de compilación.
Vaya a la pestaña "Aplicación" en el proyecto "Propiedades" y cambie el "Marco de objetivos" a 4.5.