Dmitriy (u otras personas que busquen una posible solución) si aparece una página html en el archivo descargado, sospecho que esto se debe al doble problema HttpRequest GET. Un escenario típico es el siguiente post, redirección, GET modelo:
navegador de Android emite un POST HttpRequest al servidor (por ejemplo, botón o enlace de entrega para solicitar una descarga de archivos, filename.ext decir)
El servidor transmite el nombre de archivo solicitado.ext a bytes, almacena en una variable de sesión y luego emite Response.Redirect a Download.aspx, por ejemplo, para manejar la construcción del objeto de respuesta
El navegador Android envía HttpRequest GET correctamente al servidor para Download.aspx
El servidor responde con una disposición de contenido típica: archivo adjunto; filename = "filename.ext" constructo de estilo con el objeto de respuesta que contiene el nombre de archivo solicitado.ext, siendo los bytes en la variable de sesión.
Administrador de descargas de Android, creo, luego envía otro HttpRequest GET al servidor para Download.aspx. Sospecho que el administrador de descargas interpreta la respuesta anterior de "adjunto" como un disparador para enviar este segundo GET.
Servidor (Download.aspx) de nuevo intenta construir el objeto de respuesta para enviar de vuelta al navegador.
Administrador de descargas de Android descargas nombre_de_archivo.ext, utilizando el contenido del objeto de respuesta del segundo Download.aspx.
En muchos escenarios esto estaría bien. Pero si, por ejemplo, el servidor en el código Download.aspx realiza algunas tareas domésticas y elimina la variable de sesión la primera vez que se llama, la próxima vez no habrá una variable de sesión. Entonces, dependiendo de cómo se escribe el código, es posible que el objeto de respuesta no se construya explícitamente y tal vez el Response.End no se llame y solo se envíe el html de Download.aspx.
Esto es lo que descubrimos usando Wireshark, aunque admito que asumo que es el administrador de descargas de Android el que causa el doble GET.
Espero que esta explicación haya sido de alguna ayuda.
Hola George, estoy usando la misma técnica para hacer un enlace de descarga pero no entiendo cómo podemos establecer "cabeceras HTTP", mientras que la preparación de un enlace de enlace descendente para un ancla ¿etiqueta? ¿Puedes explicar más sobre esto? – nrsharma
La configuración de los encabezados HTTP se realiza en el lado del servidor del servidor web, a menudo utilizando un lenguaje de programación como PHP, Java, CGI, etc. ¿Cómo está descargando sus archivos? –
Tenga en cuenta que esta es una publicación anterior que hace referencia a algunas de las versiones anteriores de Android y puede tener información obsoleta. Content-Disposition se usa generalmente para indicar que se solicita una descarga, en lugar de solo 'ver'. –