Dmitriy (o altri che cercano una soluzione possibile) se nel file scaricato appare una pagina html, sospetto che ciò sia dovuto al doppio problema HttpRequest GET. Uno scenario tipico è il seguente post, Redirect, ottengono il modello:
Android del browser emette un HttpRequest POST al server (ad esempio pulsante o collegamento presentare per richiedere un file di download, filename.ext dire)
Server invia il file filename.ext ai byte, archivia in una variabile di sessione e quindi invia Response.Redirect a Download.aspx, ad esempio, per gestire la struttura dell'oggetto risposta
Il browser Android invia HttpRequest GET al server per Download.aspx
Server risponde con la tipica Content-Disposition: attachment; nomefile = "nomefile.ext" costruisce lo stile con l'oggetto risposta contenente il nomefile richiesto.ext, essendo i byte nella variabile di sessione.
Android download manager, credo, quindi invia un'altra HttpRequest GET al server per Download.aspx. Sospetto che il download manager interpreti la precedente risposta "allegato" come trigger per inviare questo secondo GET.
Il server (Download.aspx) tenta nuovamente di costruire l'oggetto risposta da inviare al browser.
Gestione download Android scarica filename.ext, utilizzando il contenuto dell'oggetto risposta dal secondo Download.aspx.
In molti scenari che sarebbe stato perfetto. Ma se, ad esempio, il server nel codice Download.aspx esegue alcune operazioni di manutenzione e rimuove la variabile di sessione alla prima chiamata, la volta successiva non vi è alcuna variabile di sessione. Quindi, a seconda di come è scritto il codice, è possibile che l'oggetto di risposta non venga costruito in modo esplicito e forse la Response.End non viene chiamata e quindi solo l'html di Download.aspx finisce per essere inviato.
Questo è quello che abbiamo scoperto usando Wireshark, anche se ammetto che sto assumendo che sia il gestore di download di Android che è la causa del doppio GET.
Spero che questa spiegazione sia stata di aiuto.
Ciao George, sto usando la stessa tecnica per fare un link per il download, ma non ho ottenuto come possiamo impostare "intestazioni HTTP" mentre si prepara un collegamento downlink per un'ancora etichetta? puoi spiegare di più su questo? – nrsharma
L'impostazione delle intestazioni HTTP viene eseguita sul lato server sul server Web, spesso utilizzando un linguaggio di programmazione come PHP, Java, CGI, ecc. Come si stanno servendo i file per il download? –
Ricorda che questo è un post più vecchio che fa riferimento ad alcune delle precedenti versioni di Android e potrebbe avere informazioni obsolete. Content-Disposition viene in genere utilizzato per indicare che è richiesto un download, anziché solo una 'visualizzazione'. –