SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => ASP .NET => Mensaje iniciado por: Pucho en Jueves 1 de Marzo de 2007, 19:05

Título: Problema Al Hacer Download De Archivo
Publicado por: Pucho en Jueves 1 de Marzo de 2007, 19:05
El tema es asi: tengo en un directorio de mi aplicación un archivo excel que se genera con datos del usuario. Cuando el usuario hace click en un link deseo qu ele aparezca la ventana para hacer el download del archivo. Mi problema es que como se trata de un archivo excel lo que me está haciendo en este momento es abrirme una nueva ventana de navegador y mostrarme el archivo ahi. El link está con un Href, asi: this.litLink.Text = "<a href='" + directorio + "' target=_blank>Click aqui para bajar el listado</a>";

que forma puedo usar para hacer que se abra la ventana con la opcion de download?

Gracias de antemano
Título: Re: Problema Al Hacer Download De Archivo
Publicado por: xcx en Lunes 12 de Marzo de 2007, 14:52
Hola, lo que podrías hacer, sería, ya que estás generando el archivo en excel, sería comprimirlo en zip con alguna librería (te recomiendo la ICSharpCode.SharpZipLib.dll, buscalo en google), hacer la referencia correspondiente y por alguna parte de tu código:
Código: Text
  1.  
  2. Public Function Zip(ByVal str As String) As Boolean
  3.         Dim filenames As String = ruta_principal & str
  4.         Dim s As ZipOutputStream = New ZipOutputStream(File.Create(ruta_principal & str.Substring(0, str.LastIndexOf(&#34;.&#34;)) & &#34;.zip&#34;))
  5.         s.SetLevel(5)
  6.         Dim fs As FileStream
  7.         fs = File.OpenRead(filenames)
  8.         Dim buffer() As Byte = BitConverter.GetBytes(fs.Length)
  9.         Dim largo As Integer = CInt(fs.Length)
  10.  
  11.         Dim entry As ZipEntry = New ZipEntry(str)
  12.         s.PutNextEntry(entry)
  13.         While largo &#62; 0
  14.             Dim numRead As Int64 = fs.Read(buffer, 0, buffer.Length)
  15.             s.Write(buffer, 0, numRead)
  16.             largo -= numRead
  17.         End While
  18.         s.Finish()
  19.         s.Close()
  20.         fs.Close()
  21.         s = Nothing
  22.     End Function
  23.  
  24.  
Algo similar a eso, entonces, con esto lograrás comprimir el archivo generado dentro de un archivo zip, el cual, el usuario al intentar descargarlo, le aparecerá la ventana de descargar o abrir con alguna aplicación. Recuerda eliminar el xls generado una vez comprimido para que ahorres espacio...  Espero que te sirva.. :hola:
Título: Re: Problema Al Hacer Download De Archivo
Publicado por: sergiotarrillo en Viernes 16 de Marzo de 2007, 22:09
Hola Pucho!

Para forzar una descarga tienes que agregar el header Content-Disposition, al objeto Response. Que en codigo seria asi:

Código: Text
  1. Response.AddHeader(&#34;Content-Disposition&#34;,
  2.                     &#34;attachment; filename=tuarchivo.xls&#34;);
  3.  

Para mayores detalles visitar: Forzar la descarga de archivos en nuestros Sitios Web (http://geeks.ms/blogs/sergiotarrillo/archive/2007/03/16/11769.aspx)

Saludos,
Título: Re: Problema Al Hacer Download De Archivo
Publicado por: Pucho en Jueves 29 de Marzo de 2007, 17:55
Hola Sergio de nuevo, estuve leyendo lo que escribiste en tu página y me es de gran ayuda. Pero para lo que necesito no me sirve porque no tengo permisos de escritura en el servidor. Entonces, la idea sería generar el archivo en memoria ( no se como hacerlo ) y luego forzar su descarga, sin grabarlo físicamente. Como podría hacer eso?

Gracias de antemano

Pucho
Título: Re: Problema Al Hacer Download De Archivo
Publicado por: sergiotarrillo en Domingo 1 de Abril de 2007, 18:30
Citar
tengo en un directorio de mi aplicación un archivo excel

Este... puedes explicar un poco más de la funcionalidad que estas haciendo para ayudarte mejor...

el archivo esta en el server... pero no quieres descargar este si no otro ... :  :blink:

Saludos,