17. november 2004 - 13:59Der er
9 kommentarer og 1 løsning
Browser accepterer ikke fildownload
Hej,
Jeg har et lille system der sender en forespurgt fil tilbage browseren. Min hensigt er at filen skal sendes direkte, således at browseren kan vise en gem/åben dialog eller vise filens indhold direkte (hvis indholdet er registreret til dette, f.eks. pdf). Til dette har jeg to spørgsmål: 1. Hvorfor vil browseren ikke acceptere følgende HTTP 200 svar med 'attached' fil? 2. Hvorfor læser den ikke filnavnet, selvom det er medtaget i HTTP headeren? (den viser istedet URL til filen)
Her er Hvad HTTPLook opfangede da browseren efterspurgte filen: ------------------------------------------ HTTP/1.1 200 OK Server: Resin/3.0.8 Pragma: No-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 00:00:00 GMT Content-Disposition: attachment; filename="SPA-2000.pdf" Content-Type: application/pdf Transfer-Encoding: chunked Date: Wed, 17 Nov 2004 12:11:50 GMT
Det skal lige siges, at jeg i HTTPLook kan vælge at åbne ovennævnte data som den fil det nu en gang er, hvorefter Adobe Acrobat fint åbner den ovennævnte pdf fil.
Hej Arne, Jeg vil da lige prøve det førstnævnte. mimetype vil, i min kode, altid følge filen, Men jeg kan da prøve med den content-type. Jeg mener dog at det kan påvirke browsere til at *altid* vise download dialog e.l. istedet for at prøve at åbne direkte (hvilket er en fordel i .pdf eksemplet). Svarer tilbage i morgen om resultatet af ovennævnte forslag..
Hej igen Arne, Jeg har prøvet begge metoder, men det var slet ikke det der var noget i vejen med. Problemet var følgende: Internet Explorer 6.0 kan ikke acceptere at "Cache-Control: no-cache" er sat når den skal downloade filer. Derfor gik det galt. I Netscape 7.0 og Firefox 1.0 virkede det hele tiden, da de ikke kræver at Content allerede er "lidt" i cachen. Når man ser på HTTP strømmen kan man også se at Internet Explorer holder datastrømmen hen, indtil brugeren har trykket på enten Save, Open eller Cancel. De andre browsere downloader lystigt i baggrunden. Jeg løste det ved at sætte "Content-Control: private" der betyder at data kun skal caches på pr. bruger basis.
Næste side af samme problem er så: Uanset hvordan jeg gør, får jeg Open, Save, Cancel dialogen frem... Det irriterer mig lidt, da jeg godt kunne tænke mig at pdf filen blev vist direkte i browseren (forudsat at Acrobat reader installeret) Det har jeg set andre steder, måske kan vi også gøre det her.. Nogen idéer?
Det virker som om at Internet Explorer kun ser på "filnavnet" på den forespurgte URL. F.eks. bliver: (document.pdf ligger ved siden af html filen) <a href="document.pdf">Open Document</a> vist direkte i browseren (med plug-in). Hvorimod at: (download er en servlet der skriver det ønskede dokument på response strømmen ) <a href="someServer/download?oid=1234">Open document</a> bliver vist som Save,Open,Cancel dialog. IE kan dog sagtens se at der er tale om en pdf..
Hej - jeg blander mig lige lidt i debatte n Hvis du vil undgå at få open-save dialog frem skal du sætte content-typen til "application/pdf". Herefter trækker du en FileOutputStream ud af dit response-objekt. Og så er det bare at fyre den af.. Jeg har vedlagt lidt kode..
InputStream tempStream = .. (her skal du lave en inputstream fra din fil) ..
if (tempStream != null) { response.setContentType("application/pdf");
from = new BufferedInputStream(tempStream); to = new BufferedOutputStream(resp.getOutputStream());
byte[] buffer = new byte[4096]; // A buffer to hold file contents int bytes_read;
// How many bytes in buffer while ((bytes_read = from.read(buffer)) != -1) { to.write(buffer, 0, bytes_read); // write bytes } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.