ver studio samsung puedo programacion porque móviles movil descargar desarrollo curso como celular archivos aplicaciones abrir android asp.net-mvc pdf download

android - studio - no puedo descargar pdf en el movil



El navegador de Android no descargará el archivo pdf (1)

Tengo una aplicación web que permite a los usuarios descargar un archivo pdf. Es ASP.NET MVC y todo funciona bien en navegadores de escritorio, iPhone, Android Chrome y en una aplicación nativa de Android que anula la vista web setDownloadListener ().

Sin embargo, la descarga no parece funcionar cuando se usa el navegador predeterminado de Android. Estoy probando en un Galaxy Nexus con 4.2.2 y en un Nexus S 4g con 2.3.7. Tengo aplicaciones de visor de PDF instaladas en ambos dispositivos.

Cuando pruebo en Android Chrome, el usuario ve una tostada de "Comenzar descarga ..." y luego aparece una notificación completa de descarga en la barra de estado. El usuario puede tocar esta notificación para abrir el archivo en un visor de PDF. En el navegador predeterminado de Android no hay brindis y no se guarda ningún archivo de descarga.

Puse wireshark en la red y veo la siguiente solicitud:

GET /appapth/ViewPDF/8383600280757433_11_05_2012 HTTP/1.1 Host: 192.168.1.117 Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 X-Requested-With: com.google.android.browser User-Agent: Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Galaxy Nexus Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Accept-Encoding: gzip,deflate Accept-Language: en-US Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 Cookie: (lots o''cookie data)

y la respuesta es:

HTTP/1.1 200 OK Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Content-Type: application/pdf Content-Encoding: gzip Expires: -1 Server: Microsoft-IIS/7.5 Set-Cookie: ___TempData=; path=/ Set-Cookie: ___TempData=(lot''s o''cookie data); path=/; HttpOnly Date: Mon, 01 Apr 2013 18:22:20 GMT Content-Length: 48244 ......YQ.....T...?J.h)...!E.S(lots o''binary data)

Como puede ver en la aplicación de rastreo / se descarga el contenido de PDF. También puede ver que no estoy usando el encabezado de disposición de contenido y la respuesta se descarga con codificación gzip.

¿Alguna idea sobre por qué esto no funciona en el navegador Android predeterminado? El usuario no tiene acceso a los datos descargados y no se inicia ningún visor (o intento). La respuesta simplemente se ignora silenciosamente. (Supongo que el navegador predeterminado de Android requiere la disposición del contenido o no me gusta Gzip en la descarga, pero estoy adivinando)

Actualización ----

Eliminé nuestro filtro de acción que estaba implementando la compresión Gzip y lo agregué al encabezado del archivo adjunto de Content-Disposition. entonces, el código MVC en mi controlador es como:

public virtual ActionResult ViewPDF(string id) { try { byte[] pdf = GetPDFContent(id); FileContentResult fcr = new FileContentResult(pdf, "application/pdf"); fcr.FileDownloadName = id + ".pdf"; return fcr; }

y la respuesta Http es ahora:

HTTP/1.1 200 OK Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Content-Type: application/pdf Expires: -1 Server: Microsoft-IIS/7.5 Content-Disposition: attachment; filename=433_07_05_2012.pdf Set-Cookie: ___TempData=; path=/ Set-Cookie: ___TempData=(lots o''cookie data);path=/; HttpOnly Date: Mon, 01 Apr 2013 19:56:07 GMT Content-Length: 59069 %PDF-1.3 %.... 13 0 obj << (lots o''binary pdf data)

Ya no hay ningún gzip y hay una disposición de contenido, pero en el navegador predeterminado de Android todavía no hay descarga visible.

Actualización 2 ---

intenté las sugerencias de https://stackoverflow.com/a/5728859/90236 y http://winzter143.blogspot.com/2012/03/android-handling-of-content-disposition.html y http: // androidforums. com / application-development / 256987-android-phone-download-issue-asp-net-website.html pero sigo obteniendo los mismos resultados.


Encontré mi propia respuesta y fue mucho más simple que donde estaba buscando. Mi página con el enlace de descarga está en un iframe. Algo en el navegador predeterminado de Android pierde su descarga si ocurre en un iframe. Agregué target = "_ blank" a la etiqueta a que inicia la descarga y ahora todo funciona bien.

Aquí hay un código de muestra para demostrar el problema y la solución.

<html> <head><title>Test page</title></head> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <body> <a href="http://www.adobe.com/products/eulas/pdfs/Photoshop_On_a_Server_Policy_5-31-2011.pdf"> Download sample pdf</a><br /> <iframe src="inner.html" /> </body> </html>

y inner.html:

<html> <head><title>test iframe</title></head> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <body> <p>This does NOT work on Android default browser. <a href="http://www.adobe.com/products/eulas/pdfs/Photoshop_On_a_Server_Policy_5-31-2011.pdf"> Download sample pdf within iframe</a></p> <p><a href="http://www.adobe.com/products/eulas/pdfs/Photoshop_On_a_Server_Policy_5-31-2011.pdf" target="_blank">Download sample pdf within iframe with target</a>.</p> </body> </html>