Mit Chrome 12.0.742.112, wenn ich mit den folgenden Headern umleitung:
HTTP/1.1 302 Found
Location: http://0.0.0.0:3000/files/download.zip
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Ua-Compatible: IE=Edge
X-Runtime: 0.157964
Content-Length: 0
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:42:25 GMT
Connection: Keep-Alive
Wenn dies befolgt wird, wird der folgende Header zurückgegeben:
HTTP/1.1 200 OK
Last-Modified: Tue, 05 Jul 2011 18:18:30 GMT
Content-Type: application/zip
Content-Length: 150014
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:44:47 GMT
Connection: Keep-Alive
Chrome leitet die vorherige Seite nicht weiter und ändert sie auch nicht. Es wird lediglich die folgende Warnung in der Konsole angezeigt:
Ressource als Dokument interpretiert, aber mit Anwendung / Zip vom Typ MIME übertragen.
Der Vorgang funktioniert in Firefox ordnungsgemäß und auch in Chrome, wenn ich einen neuen Tab öffne und direkt zu gehe http://0.0.0.0:3000/files/download.zip
. Mache ich etwas falsch oder ist dies ein Fehler / eine Eigenart von Chrome?
javascript
google-chrome
Ashley Williams
quelle
quelle
Antworten:
Sie können das HTML5- Download- Attribut in Ihrem <a> -Tag angeben .
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download
quelle
In Ihrem Anforderungsheader haben Sie gesendet,
Content-Type: text/html
was bedeutet, dass Sie die Antwort als HTML interpretieren möchten. Wenn Ihnen sogar ein Server PDF-Dateien sendet, versucht Ihr Browser, diese als HTML zu verstehen. Das ist das Problem. Ich suche nach dem Grund. :) :)quelle
Content-Type: application/zip
, es versucht immer noch, es als 'Dokument' zu verarbeiten. Es ist wahrscheinlich auch erwähnenswert, dass die Zip-URL in meiner App dynamisch ist, sodass es nichts mit Caching zu tun hat.Accept
Anforderungsheader als sendettext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
? Ich bin hier absolut ratlos, das bin ich wirklich!text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
es gibt einen Teil, der besagt, dass Chrome fast alles akzeptiert (*/*
).Ich habe dieses Problem beim Bereitstellen einer PDF-Datei (MIME-Typ-Anwendung / PDF) festgestellt und es durch Setzen des Content-Disposition-Headers behoben, z.
Hoffentlich hilft das.
quelle
Ich habe das behoben ... indem ich einfach einen neuen Tab geöffnet habe.
Warum es nicht funktioniert hat, weiß ich nicht genau, aber es könnte etwas damit zu tun haben, wie Chrome mit mehreren Downloads auf einer Seite umgeht. Vielleicht dachte es, es handele sich um Spam und ignorierte sie einfach.
quelle
Ich konnte nirgendwo nur eine Erklärung der Botschaft finden. Hier ist meine Interpretation.
Soweit ich weiß, erwartete Chrome Material, das möglicherweise angezeigt werden könnte (ein Dokument ), aber es erhielt etwas, das nicht angezeigt werden konnte (oder etwas, das nicht angezeigt werden sollte).
Dies ist sowohl eine Frage, wie das Dokument auf der HTML-Seitenebene in deklariert wurde
href
(siehe dasdownload
Attribut in Roys Nachricht) als auch, wie es in der Antwort des Servers mittels HTTP-Headern deklariert wird (insbesondereContent-Disposition
) . Dies ist eine Vertragsfrage im Gegensatz zu Hoffnung und Erwartung.Um Evans Weg fortzusetzen, habe ich Folgendes erlebt:
ist nur unvereinbar mit:
Chrome wird weinen Ressource als Dokument interpretiert, aber übertragen ...
Tatsächlich bedeutet die Anordnung der Anhänge nur Folgendes: Der Browser soll den Link nicht interpretieren, sondern ihn irgendwo für andere - versteckte - Zwecke speichern. Hier oben
download
fehlt entweder danebenhref
oderContent-disposition
muss aus den Headern entfernt werden. Es hängt davon ab, ob der Browser das Dokument rendern soll oder nicht.Hoffe das hilft.
quelle
Ich habe heute dasselbe Problem mit Chrome Version 30.0.1599.66 mit meiner Anwendung node.js / express.js festgestellt.
Die Header sind korrekt, Express - Sets sie automatisch richtig, es funktioniert in anderen Browsern wie angegeben, html setzen 5 ‚Download‘ Attribut nicht beheben können , was tat resolve es in die Chrom erweiterten Einstellungen wird und das Kontrollkästchen „Fragen Sie , wo sparen jede Datei vor dem Herunterladen ".
Danach wurde kein Fehler "Ressource als Dokument interpretiert ..." gemeldet, wie im Titel dieses Problems angegeben. Es scheint also, dass unser Servercode korrekt ist. Chrome meldet diesen Fehler fälschlicherweise in der Konsole, wenn er zum Speichern festgelegt ist Dateien automatisch an einen Speicherort.
quelle
Ich hatte ein ähnliches Problem beim Ausführen eines Dateidownloads über Javascript. Das Hinzufügen des Download-Attributs machte keinen Unterschied, das Hinzufügen von target = '_ blank' jedoch - die Konsolenmeldung 'Ressource als Dokument interpretiert ...' wird nicht mehr angezeigt.
Hier ist mein schön einfacher Code:
Ich habe es nicht mit direktem HTML versucht, würde aber erwarten, dass es funktioniert.
Hinweis Ich habe festgestellt, dass in Firefox der Link an das Dokument angehängt werden muss, während Chrome ohne diesen Link funktioniert.
quelle
Ich bin darauf gestoßen, als ich src = "image_url" in einem Iframe zugewiesen habe. Es scheint, dass iframe es als Dokument interpretiert, aber es ist nicht. Deshalb wird eine Warnung angezeigt.
quelle
var photoData = new FormData();
und dann die EigenschaftcontentType: false
in meiner Ajax-Anfrage festgelegt. Die Post-Anfrage lautet:Content-Disposition: form-data;
Und der InhaltstypContent-Type: text/html
Ich habe das Problem durch
adding target="_blank"
den Link gelöst . Damit öffnet Chrome einen neuen Tab und lädt das PDF auch im Reaktionsmodus ohne Vorwarnung.quelle
window.open(href, '_blank');
und der neue Tab wird nach dem Download automatisch geschlossen.Ich hatte dieses Problem in einem ASP-Website-Projekt. Durch Hinzufügen eines Headers "Content-Length" funktionierten Downloads in Chrome wieder.
quelle
Dieses Problem wurde in der Chrome 61-Version erneut angezeigt. Aber es scheint, dass es auf Chrome 62 behoben ist.
Ich habe eine RewriteRule wie unten
Bei Chrome 61 wurde das PDF nicht geöffnet, in der Konsole wurde die Nachricht angezeigt
Wir haben versucht, den MIME-Typ wie folgt in die Umschreiberegel einzufügen, aber es hat nicht geholfen.
Ich habe mein Chrome auf die neueste 62-Version aktualisiert und es wird wieder das PDF angezeigt. Die Nachricht befindet sich jedoch noch in der Konsole.
Mit allen anderen Browsern funktionierte / funktioniert es einwandfrei.
quelle
Ich bin gerade darauf gestoßen, und keine der anderen Informationen, die ich finden konnte, hat geholfen: Es war ein dummer Fehler: Ich habe vor dem Starten des Dateidownloads eine Ausgabe an den Browser gesendet. Überraschenderweise wurden keine hilfreichen Fehler gefunden (wie "bereits gesendete Header" usw.). Hoffentlich erspart dies jemand anderem etwas Kummer!
quelle
In meinem Fall war der Dateiname zu lang und hat den gleichen Fehler erhalten. Einmal unter 200 Zeichen gekürzt funktionierte gut. (Limit könnte 250 sein?)
quelle
Ich habe diesen Fehler erhalten, weil ich von meinem Dateisystem aus bedient habe. Sobald ich mit einem http-Server angefangen habe, konnte Chrome es herausfinden.
quelle
Ich hatte die gleichen Probleme mit einem von mir erstellten Download-Manager. Das Problem war, dass der Dateiname zu lang war und die Erweiterung abgeschnitten wurde.
Beispiel: Dateiname: Organisationsprotokolle und andere wichtige Dinge.pd
Lösung: Das MySQL-Datenbankfeld wurde auf 255 erhöht, um den Dateinamen zu speichern, und vor dem Speichern des Blobs eine Längenprüfung durchgeführt. Wenn die Länge> 255 ist, reduzieren Sie sie auf 250 und fügen Sie die Dateierweiterung hinzu.
quelle
Versuchen Sie den folgenden Code und ich hoffe, dass dies für Sie funktioniert.
quelle
Ich habe mich heute damit konfrontiert und mein Problem war, dass mein
Content-Disposition
Tag falsch gesetzt wurde. Es sieht aus wie für beidepdf
&application/x-zip-compressed
, du solltest es aufinline
anstatt setzenattachment
.Um Ihren Header festzulegen, würde Java-Code folgendermaßen aussehen:
quelle