Problema Codigo descarga fichero

18/10/2005 - 12:07 por Jose | Informe spam
Hola amigos,

tengo un problema bastante grave con el siguiente codigo. Se usa para que
sale el dialogo de descarga de un fichero
El problema es que la ventana de Abrir/Guardar aparece, pero no se abre ni
se descarga nada.

Alguien puede orientarme?

Gracias


Dim f,strFilePath, strFileSize, strFileName
Const adTypeBinary = 1


If (Existe_Archivo(Fichero)) Then
f=Fichero

strFileSize = Tam_Archivo(f,false)
strFilePath = Server.MapPath(f)
strFileName = Nombre_Archivo(strFilePath)




strFileType = lcase(Right(strFileName, 4))

Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".asp"
ContentType = "text/asp"
Case ".pdf"
ContentType="application/pdf"
Case Else
'Handle All Other Files
ContentType = "application/octet-stream"
End Select

Response.Buffer = True
Response.Clear

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath

Response.ContentType = ContentType
Response.AddHeader "Content-Disposition", "attachment; filename=""" &
strFileName & """"

Response.AddHeader "Content-Length", strFileSize

Response.Charset = "UTF-8"


Response.BinaryWrite objStream.Read
'Response.Flush

objStream.Close
Set objStream = Nothing



End If

Preguntas similare

Leer las respuestas

#1 richi
18/10/2005 - 15:05 | Informe spam
Antes si funcionaba,

pero de un día para otro, parece que ha dejado de funcionar.

El flush comentado es porque he estado tocando y posiblemente haya mandado
un codigo "retocado"

probaré lo que me dices, pero de todas formas he leido que usar el objeto
objStream requiere que el usuario anonimo tenga permisos de administrador,
si esto es cierto cabe la posibilidad que mi hosting haya tocado algo en los
permisos y este codigo ya no funcione, no?

Saludos y gracias.

"Matías Iacono" escribió en el mensaje
news:
Antes te funcionaba?

Lo posible que veo es que, por un lado tienes comentado el Flush, y a
continuacion haces un close y un set a nothing.

Como ASP solo trabaja en el lado del servidor, todo este codigo solo se
ejecuta cuando la pagina aun no ha sido cargada, o sea, cuando aun no se
envio los datos al cliente, entonces, como tienes un buffer en true, esto
hace que nada sea enviado al cliente hasta que la pagina no termina con
todo su codigo, lo que hace, en definitiva, que antes de poder ser enviado
el archivos, cierres el objeto y lo destruyas.

Posibles soluciones, descomenta el flush.

Saludos.

Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3
"Jose" escribió en el mensaje
news:OMHGq%

Hola amigos,

tengo un problema bastante grave con el siguiente codigo. Se usa para que
sale el dialogo de descarga de un fichero
El problema es que la ventana de Abrir/Guardar aparece, pero no se abre
ni se descarga nada.

Alguien puede orientarme?

Gracias


Dim f,strFilePath, strFileSize, strFileName
Const adTypeBinary = 1


If (Existe_Archivo(Fichero)) Then
f=Fichero

strFileSize = Tam_Archivo(f,false)
strFilePath = Server.MapPath(f)
strFileName = Nombre_Archivo(strFilePath)




strFileType = lcase(Right(strFileName, 4))

Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".asp"
ContentType = "text/asp"
Case ".pdf"
ContentType="application/pdf"
Case Else
'Handle All Other Files
ContentType = "application/octet-stream"
End Select

Response.Buffer = True
Response.Clear

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath

Response.ContentType = ContentType
Response.AddHeader "Content-Disposition", "attachment; filename=""" &
strFileName & """"

Response.AddHeader "Content-Length", strFileSize

Response.Charset = "UTF-8"


Response.BinaryWrite objStream.Read
'Response.Flush

objStream.Close
Set objStream = Nothing



End If








Respuesta Responder a este mensaje
#2 Matías Iacono
18/10/2005 - 17:15 | Informe spam
Antes te funcionaba?

Lo posible que veo es que, por un lado tienes comentado el Flush, y a
continuacion haces un close y un set a nothing.

Como ASP solo trabaja en el lado del servidor, todo este codigo solo se
ejecuta cuando la pagina aun no ha sido cargada, o sea, cuando aun no se
envio los datos al cliente, entonces, como tienes un buffer en true, esto
hace que nada sea enviado al cliente hasta que la pagina no termina con todo
su codigo, lo que hace, en definitiva, que antes de poder ser enviado el
archivos, cierres el objeto y lo destruyas.

Posibles soluciones, descomenta el flush.

Saludos.

Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3
"Jose" escribió en el mensaje
news:OMHGq%

Hola amigos,

tengo un problema bastante grave con el siguiente codigo. Se usa para que
sale el dialogo de descarga de un fichero
El problema es que la ventana de Abrir/Guardar aparece, pero no se abre ni
se descarga nada.

Alguien puede orientarme?

Gracias


Dim f,strFilePath, strFileSize, strFileName
Const adTypeBinary = 1


If (Existe_Archivo(Fichero)) Then
f=Fichero

strFileSize = Tam_Archivo(f,false)
strFilePath = Server.MapPath(f)
strFileName = Nombre_Archivo(strFilePath)




strFileType = lcase(Right(strFileName, 4))

Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".asp"
ContentType = "text/asp"
Case ".pdf"
ContentType="application/pdf"
Case Else
'Handle All Other Files
ContentType = "application/octet-stream"
End Select

Response.Buffer = True
Response.Clear

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath

Response.ContentType = ContentType
Response.AddHeader "Content-Disposition", "attachment; filename=""" &
strFileName & """"

Response.AddHeader "Content-Length", strFileSize

Response.Charset = "UTF-8"


Response.BinaryWrite objStream.Read
'Response.Flush

objStream.Close
Set objStream = Nothing



End If




Respuesta Responder a este mensaje
#3 dani castillo
18/10/2005 - 17:31 | Informe spam
pregunta tonta ¿realmente neesitas ese esquema? normalmente basta con
redirigir a el fichero... aunq supongo que quieres forzar el dialogo

prueba a poner el response.buffer=true como primera linea de tu asp, sin
ningun salto de linea anterior ni nada parecido, ni siquiera (mejor dicho,
sobretodo no) saltos de linea en html, a ver si hay suerte

"richi" escribió en el mensaje
news:eA1mxS%


Antes si funcionaba,

pero de un día para otro, parece que ha dejado de funcionar.

El flush comentado es porque he estado tocando y posiblemente haya mandado
un codigo "retocado"

probaré lo que me dices, pero de todas formas he leido que usar el objeto
objStream requiere que el usuario anonimo tenga permisos de administrador,
si esto es cierto cabe la posibilidad que mi hosting haya tocado algo en
los permisos y este codigo ya no funcione, no?

Saludos y gracias.

"Matías Iacono" escribió en el mensaje
news:
Antes te funcionaba?

Lo posible que veo es que, por un lado tienes comentado el Flush, y a
continuacion haces un close y un set a nothing.

Como ASP solo trabaja en el lado del servidor, todo este codigo solo se
ejecuta cuando la pagina aun no ha sido cargada, o sea, cuando aun no se
envio los datos al cliente, entonces, como tienes un buffer en true, esto
hace que nada sea enviado al cliente hasta que la pagina no termina con
todo su codigo, lo que hace, en definitiva, que antes de poder ser
enviado el archivos, cierres el objeto y lo destruyas.

Posibles soluciones, descomenta el flush.

Saludos.

Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3
"Jose" escribió en el mensaje
news:OMHGq%

Hola amigos,

tengo un problema bastante grave con el siguiente codigo. Se usa para
que sale el dialogo de descarga de un fichero
El problema es que la ventana de Abrir/Guardar aparece, pero no se abre
ni se descarga nada.

Alguien puede orientarme?

Gracias


Dim f,strFilePath, strFileSize, strFileName
Const adTypeBinary = 1


If (Existe_Archivo(Fichero)) Then
f=Fichero

strFileSize = Tam_Archivo(f,false)
strFilePath = Server.MapPath(f)
strFileName = Nombre_Archivo(strFilePath)




strFileType = lcase(Right(strFileName, 4))

Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".asp"
ContentType = "text/asp"
Case ".pdf"
ContentType="application/pdf"
Case Else
'Handle All Other Files
ContentType = "application/octet-stream"
End Select

Response.Buffer = True
Response.Clear

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath

Response.ContentType = ContentType
Response.AddHeader "Content-Disposition", "attachment; filename=""" &
strFileName & """"

Response.AddHeader "Content-Length", strFileSize

Response.Charset = "UTF-8"


Response.BinaryWrite objStream.Read
'Response.Flush

objStream.Close
Set objStream = Nothing



End If












Respuesta Responder a este mensaje
#4 Matías Iacono
18/10/2005 - 18:58 | Informe spam
Si, podria ser, esto debido a que podrias sacar cualquier archivo del disco
duro de tu proveedor sin autorizacion.

Saludos.

Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3
"richi" escribió en el mensaje
news:eA1mxS%


Antes si funcionaba,

pero de un día para otro, parece que ha dejado de funcionar.

El flush comentado es porque he estado tocando y posiblemente haya mandado
un codigo "retocado"

probaré lo que me dices, pero de todas formas he leido que usar el objeto
objStream requiere que el usuario anonimo tenga permisos de administrador,
si esto es cierto cabe la posibilidad que mi hosting haya tocado algo en
los permisos y este codigo ya no funcione, no?

Saludos y gracias.

"Matías Iacono" escribió en el mensaje
news:
Antes te funcionaba?

Lo posible que veo es que, por un lado tienes comentado el Flush, y a
continuacion haces un close y un set a nothing.

Como ASP solo trabaja en el lado del servidor, todo este codigo solo se
ejecuta cuando la pagina aun no ha sido cargada, o sea, cuando aun no se
envio los datos al cliente, entonces, como tienes un buffer en true, esto
hace que nada sea enviado al cliente hasta que la pagina no termina con
todo su codigo, lo que hace, en definitiva, que antes de poder ser
enviado el archivos, cierres el objeto y lo destruyas.

Posibles soluciones, descomenta el flush.

Saludos.

Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3
"Jose" escribió en el mensaje
news:OMHGq%

Hola amigos,

tengo un problema bastante grave con el siguiente codigo. Se usa para
que sale el dialogo de descarga de un fichero
El problema es que la ventana de Abrir/Guardar aparece, pero no se abre
ni se descarga nada.

Alguien puede orientarme?

Gracias


Dim f,strFilePath, strFileSize, strFileName
Const adTypeBinary = 1


If (Existe_Archivo(Fichero)) Then
f=Fichero

strFileSize = Tam_Archivo(f,false)
strFilePath = Server.MapPath(f)
strFileName = Nombre_Archivo(strFilePath)




strFileType = lcase(Right(strFileName, 4))

Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".asp"
ContentType = "text/asp"
Case ".pdf"
ContentType="application/pdf"
Case Else
'Handle All Other Files
ContentType = "application/octet-stream"
End Select

Response.Buffer = True
Response.Clear

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath

Response.ContentType = ContentType
Response.AddHeader "Content-Disposition", "attachment; filename=""" &
strFileName & """"

Response.AddHeader "Content-Length", strFileSize

Response.Charset = "UTF-8"


Response.BinaryWrite objStream.Read
'Response.Flush

objStream.Close
Set objStream = Nothing



End If












Respuesta Responder a este mensaje
#5 Jose
19/10/2005 - 09:47 | Informe spam
Hola,

el motivo de usar este codigo es porque la web en la que vá esta maquetada
con XHTML y no se puede usar el "target=_blank", por lo que el archivo se
cargaria en la misma ventana

Con este codigo doy la opción de abrirlo o guardarlo.

Ademas, tenía previsto usarlo para que cuando tubiera que implementar
permisos de usuario sobre ficheros, estos solo pudieran ser descargados por
gente autorizada.

Hay alguna forma parecida de conseguir esto?

Y ya que estamos, me gustaría que me recomendarán algun libro (a ser posible
en español) sobre la creación de Intranets o programación ASP avanzada.

Saludos.


"Matías Iacono" escribió en el mensaje
news:uqEWrr%

Si, podria ser, esto debido a que podrias sacar cualquier archivo del
disco duro de tu proveedor sin autorizacion.

Saludos.

Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3
"richi" escribió en el mensaje
news:eA1mxS%


Antes si funcionaba,

pero de un día para otro, parece que ha dejado de funcionar.

El flush comentado es porque he estado tocando y posiblemente haya
mandado un codigo "retocado"

probaré lo que me dices, pero de todas formas he leido que usar el objeto
objStream requiere que el usuario anonimo tenga permisos de
administrador, si esto es cierto cabe la posibilidad que mi hosting haya
tocado algo en los permisos y este codigo ya no funcione, no?

Saludos y gracias.

"Matías Iacono" escribió en el mensaje
news:
Antes te funcionaba?

Lo posible que veo es que, por un lado tienes comentado el Flush, y a
continuacion haces un close y un set a nothing.

Como ASP solo trabaja en el lado del servidor, todo este codigo solo se
ejecuta cuando la pagina aun no ha sido cargada, o sea, cuando aun no se
envio los datos al cliente, entonces, como tienes un buffer en true,
esto hace que nada sea enviado al cliente hasta que la pagina no termina
con todo su codigo, lo que hace, en definitiva, que antes de poder ser
enviado el archivos, cierres el objeto y lo destruyas.

Posibles soluciones, descomenta el flush.

Saludos.

Matías Iacono
Microsoft MVP ASP/ASP.net - DCE3
"Jose" escribió en el mensaje
news:OMHGq%

Hola amigos,

tengo un problema bastante grave con el siguiente codigo. Se usa para
que sale el dialogo de descarga de un fichero
El problema es que la ventana de Abrir/Guardar aparece, pero no se abre
ni se descarga nada.

Alguien puede orientarme?

Gracias


Dim f,strFilePath, strFileSize, strFileName
Const adTypeBinary = 1


If (Existe_Archivo(Fichero)) Then
f=Fichero

strFileSize = Tam_Archivo(f,false)
strFilePath = Server.MapPath(f)
strFileName = Nombre_Archivo(strFilePath)




strFileType = lcase(Right(strFileName, 4))

Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".asp"
ContentType = "text/asp"
Case ".pdf"
ContentType="application/pdf"
Case Else
'Handle All Other Files
ContentType = "application/octet-stream"
End Select

Response.Buffer = True
Response.Clear

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile strFilePath

Response.ContentType = ContentType
Response.AddHeader "Content-Disposition", "attachment; filename=""" &
strFileName & """"

Response.AddHeader "Content-Length", strFileSize

Response.Charset = "UTF-8"


Response.BinaryWrite objStream.Read
'Response.Flush

objStream.Close
Set objStream = Nothing



End If

















email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida