Otro uso con un poco más de complejidad podría ser copiando on de fly los archivos permitidos a un directorio virtual para cada usuario, agregando al path algún dato como el SessionID. Algo así como hace Yahoo! para las descargas.
Cristian. _____ De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de José A. Fernández Enviado el: Lunes, 16 de Julio de 2007 17:28 Para: [email protected] Asunto: [puntonet] Descarga de archivos segun usuarios en ASP.NET 2.0 Hola Mariano LA solucion mas rapida y simple...que la utilizo Proteccion de archivos: --------------------------- Colocar tus archivos en una ubicacion protegida (fuera del directorio del website podria ser si tiene acceso al disco completo), pero si no puedes en fuera del website, podrias en una carpeta protegida con autorizacion de HYPERLINK "http://asp.net"asp.net Es por un lado para proteger. <location path="~/recursos/archivos/"> <system.web> <authorization> <allow users="[lista de usuarios separados por comas]" roles="[lista de funciones separadas por comas]"/> <deny users="[lista de usuarios separados por comas]" roles="[ lista de funciones separadas por comas]"/> </authorization> </system.web> </location> Esto en el web.config general por eso de location o tambien puedes en archivo webconfig que contenga solamente este sectgor en la carpeta <configuration> <system.web> <authorization> <deny users=... HAsta ahi tienes protegido, te puede servir si por ejemplo tienes un grupo de descarga para los archivos o simplementa uusarios autenticados solamente puedan descargar Pero si necesitas tener un control mas estricto de la descarga, tendras que implementar lo que te comenta Diego Ahora veamos el tema de la descarga ---------------------------------------- Por lo que comentas son archivos fisicos (es decir no estan en la db, ni tampoco lo estas creando on fly), o sea puedes leerlo mediante codigo, entonces aqui tienes dos opciones A) Leerlos en un objeto FileStream (colo el enlace mas abajo) y luego B) Escribir directamente en la respuesta HTTP (dependiendo de cual grande sea los archivos) De las dos opciones mas abajo coloco los codigo de ejemplo de unos proyectos, creo que te pueden servir La idea es mostrar como quieras los archivos (desde la DB, leyendo el directorio y mostrando las propiedades como ser nombre, tamaño) pero que el visitante no sepa donde estas ubicados. Cuando quiera descargar tendras que realizar uno de los dos opciones y tambien (si miras el codigo) cambiar el ContentType de la cabecera HTTP que como sabras para que el browser sepa que hacer. Enlaces que te pueden servir: -------------------------------- FileStream (Clase) Expone un objeto Stream alrededor de un archivo; se admiten operaciones de lectura y escritura sincrónica y asincrónica. HYPERLINK "http://msdn2.microsoft.com/es-es/library/system.io.filestream(VS.80).aspx"h ttp://msdn2.microsoft.com/es-es/library/system.io.filestream(VS.80).aspx HttpResponse.WriteFile (Método) Escribe el archivo especificado directamente en la secuencia de salida de una respuesta HTTP. HYPERLINK "http://msdn2.microsoft.com/es-es/library/system.web.httpresponse.writefile( VS.80).aspx"http://msdn2.microsoft.com/es-es/library/system.web.httpresponse .writefile(VS.80).aspx Handling Custom File Downloads in HYPERLINK "http://ASP.NET"ASP.NET With Server Controls HYPERLINK "http://www.eggheadcafe.com/articles/20011006.asp"http://www.eggheadcafe.com /articles/20011006.asp Downloading Files - Forcing the File Download Dialog HYPERLINK "http://aspalliance.com/259"http://aspalliance.com/259 Force download HYPERLINK "http://www.dotnetspider.com/kb/Article1802.aspx"http://www.dotnetspider.com /kb/Article1802.aspx OPCION A: Codigo de descarga --------------------------------- Public Sub Descargar(ByVal archivoPath As String, ByVal archivoNombre As String) Try Dim fullPath = Path.GetFullPath(archivoPath) Dim name = archivoNombre Dim ext = Path.GetExtension(fullPath) Dim type As String = "" If Not IsDBNull(ext) Then ext = ext.ToString.ToLower End If Response.Clear() Response.ClearContent() Response.ClearHeaders() Select Case ext Case ".pdf" type = "Application/pdf" Case ".htm", ".html" type = "text/HTML" Case ".txt" type = "text/plain" Case ".doc", ".rtf" type = "Application/msword" Case ".csv", ".xls" type = "Application/x-msexcel" Case ".mp3", ".mpeg", ".mp2", ".wav", ".avi", ".dat", ".jpg", ".swf", ".jpeg", ".bmp" type = "application/octet-stream" Case ".exe" type = "application/octet-stream" Case Else type = "text/plain" End Select Dim streamArchivo As IO.FileStream streamArchivo = IO.File.Open(fullPath, IO.FileMode.Open) Dim getContent(streamArchivo.Length) As Byte streamArchivo.Read(getContent, 0, streamArchivo.Length) streamArchivo.Close() Response.AddHeader("content-disposition", "attachment; filename=" + name) If type <> "" Then Response.ContentType = type End If Response.BinaryWrite(getContent) Response.End() Catch ex As Exception '...obtengo el error End Try End Sub OPCION B: ---------------- string path = archivoFullPath; context.Response.AppendHeader("content-disposition", "attachment; filename=" + archivoNombre); context.Response.ContentType = type; context.Response.WriteFile(path); Espero que te sirva de ayuda o guia ______________________ Jose A. Fernandez On 7/16/07, Leonardo Micheloni <HYPERLINK "mailto:[EMAIL PROTECTED]"[EMAIL PROTECTED] m> wrote: Se me ocurre que no necesariamente los archivos tienen que estar en una dirección, es decir, podés crearlos on the fly. O sea, el usuario se conecta y le listás lo que puede bajar, cuando hace click lees el archivo (desde el origen, un disco, o BD) y lo escribís con el correspondiente content etc en una nueva página para que lo pueda descargar. La otra opción es la que dice Diego, puede ver la url pero el HttpModule no lo deja acceder. Saludos, Leonardo. On 7/16/07, Mariano Minoli < HYPERLINK "mailto:[EMAIL PROTECTED]"[EMAIL PROTECTED]> wrote: > > > > Buenas lista, > > > > Necesito implementar una página que liste archivos (disponibles en un ftp) > de acuerdo al usuario que esté logueado, permita descargarlos. La cuestión > es que no quiero dejar los archivos disponibles en un directorio virtual del > estilo: > > > > HYPERLINK "http://misitio.com/archivos/usuario123.pdf"http://misitio.com/archivos/usua rio123.pdf > > HYPERLINK "http://misitio.com/archivos/usuario124.pdf"http://misitio.com/archivos/usua rio124.pdf > > HYPERLINK "http://misitio.com/archivos/usuario125.pdf"http://misitio.com/archivos/usua rio125.pdf > > HYPERLINK "http://misitio.com/archivos/usuario126.pdf"http://misitio.com/archivos/usua rio126.pdf > > > > Porque otros podrían ver la url e inferir la url de los archivos de otro > usuario, descargando información que no les corresponde. > > > > Se les ocurre alguna solución que permita descargar archivos y que no > permita que otro usuario, escribiendo la url, acceda a los archivos que no > le corresponde ?? > > > > Desde ya muchas gracias. > > > > > > Mariano Minoli > > ________________________________ > Be a better Globetrotter. Get better travel answers from someone who knows. > Yahoo! Answers - Check it out. -- No virus found in this incoming message. Checked by AVG Free Edition. Version: 7.5.476 / Virus Database: 269.10.8/904 - Release Date: 16/07/2007 17:42 No virus found in this outgoing message. Checked by AVG Free Edition. Version: 7.5.476 / Virus Database: 269.10.8/904 - Release Date: 16/07/2007 17:42
<<image001.gif>>
