Creamos dentro de la tabla correspondiente un campo varbinary(max) que alojará nuestro fichero. Dentro de un formulario metemos un FileUpload que capturé el fichero a subir y un botón que será el que capturé el evento de guardarlo.
Bien en el codebehind del botón ponemos lo siguiente:
if (FileUpload1.HasFile)
{
//Creamos un array de bytes para almacenar los datos leídos por fs.
Byte[] data = FileUpload1.FileBytes;
//Y guardamos los datos en el array data
Incidencias.Incidencia.fichero = data;
}
Esto está por LINQ to SQL pero por ADO.NET sería exactamente igual, se lo pasaríamos como un parámetro más a la inserción y listo.
En el momento de querer descargar el fichero, los pasos a seguir son los siguientes. Metemos en el formulario un botón descargar y en la parte de código lo siguiente:
protected void btnDescargar_Click(object sender, ImageClickEventArgs e)
{
try
{
IncidencyManager Incidencias = new IncidencyManager(int.Parse(idPruebaGuardar));
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
Response.ContentType = "text/plain";
Response.AddHeader("Content-Disposition", "attachment; filename=" + txtFichero.Text);
Response.BinaryWrite(Incidencias.Incidencia.fichero.ToArray());
Response.Flush();
Response.Close();
}
catch (Exception ex)
{
}
}
Lo mismo, está en LINQ pero sino en al BinaryWrite le pasaís el parametro correspondiente y perfecto. Dejar el catch sin nada porque en el caso de querer cancelar el usuario la descarga, se produce una excepción, pero que en mi opinión no se debería de capturar.
No hay comentarios:
Publicar un comentario