Zasób zinterpretowany jako dokument, ale przesłany za pomocą aplikacji typu MIME / zip

Z Chrome 12.0.742.112, jeśli przekieruję z następującymi nagłówkami:

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

Które jeśli nastąpi, zwróci następujący nagłówek:

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 nie przekieruje, ani nie zmieni poprzedniej strony, po prostu zgłosi następujące ostrzeżenie w konsoli:

Zasób zinterpretowany jako dokument, ale przesłany za pomocą typu MIME application / zip.

Proces działa poprawnie w Firefoksie, a także działa dobrze w Chrome, jeśli otworzę nową kartę i przejść bezpośrednio do http://0.0.0.0:3000/files/download.zip. Czy robię coś nie tak, czy jest to błąd / dziwactwo Chrome?

Author: Uwe Keim, 2011-07-05

21 answers

Możesz określić atrybut HTML5 download w tagu .

<a href="http://example.com/archive.zip" download>Export</a>

Https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download

 175
Author: Roy Hyunjin Han,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-15 04:36:45

W nagłówku zapytania wysłałeś Content-Type: text/html, co oznacza, że chcesz zinterpretować odpowiedź jako HTML. Teraz, jeśli nawet serwer wysyła Ci pliki PDF, twoja przeglądarka próbuje zrozumieć go jako HTML. W tym problem. Szukam przyczyny. :)

 35
Author: Saeed Neamati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-05 18:51:05

Doświadczyłem tego problemu podczas serwowania pliku PDF (mime type application/pdf) i rozwiązałem go ustawiając nagłówek Content-Disposition, np.:

Content-Disposition: attachment; filename=foo.pdf
Mam nadzieję, że to pomoże.
 25
Author: Evan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-01 21:12:30

Nie mogłem znaleźć nigdzie tylko Wyjaśnienie samej wiadomości. Oto moja interpretacja.

O ile rozumiem, Chrome spodziewał się jakiegoś materiału, który mógłby wyświetlać( dokument ), ale uzyskał coś, czego nie mógł wyświetlić (lub coś, czego mu zabroniono wyświetlać).

Jest to zarówno kwestia tego, jak dokument został zadeklarowany na poziomie strony HTML w href (Zobacz atrybut download w wiadomości Roya) i jak jest zadeklarowany w odpowiedzi serwera za pomocą nagłówków HTTP(w szczególności Content-Disposition). Jest to kwestia umowy , W przeciwieństwie do nadziei i oczekiwań.

Aby kontynuować, doświadczyłem tego:

Content-type: application/pdf
Content-disposition: attachment; filename=some.pdf

Jest po prostu niespójne z:

<a href='some.pdf'>

Chrome będzie płakać zasób zinterpretowany jako dokument, ale przeniesiony...

W zasadzie załącznik oznacza tylko to: przeglądarka nie interpretuje linku, ale raczej przechowuj go gdzieś w innych-ukrytych-celach. Tutaj powyżej, download jest brak obok href, lub Content-disposition musi zostać usunięty z nagłówków. Zależy to od tego, czy chcemy, aby przeglądarka renderowała dokument, czy nie.

Mam nadzieję, że to pomoże.
 25
Author: Champignac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-23 19:57:53

Naprawiłem this...by wystarczy otworzyć nową kartę.

Dlaczego nie działa nie jestem do końca pewien, ale może to mieć coś wspólnego z tym, jak Chrome radzi sobie z wieloma plikami do pobrania na stronie, Być może myślał, że są spamem i po prostu je zignorował.

 23
Author: Ashley Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-05 19:26:31

Ten sam problem napotkałem dzisiaj z Chrome w wersji 30.0.1599.66 z moim węzłem.js / express.aplikacja js.

Nagłówki poprawne, express ustawia je poprawnie automatycznie, działa w innych przeglądarkach, jak wskazano, umieszczenie atrybutu HTML 5 "Pobierz" nie rozwiązuje, co zrobił rozwiązuje, że wchodzi do zaawansowanych ustawień chrome i zaznacza pole "zapytaj, gdzie zapisać każdy plik przed pobraniem".

Po tym nie było " zasobów interpretowane jako dokument...."błąd zgłoszony jak w tytule tego problemu, więc wydaje się, że nasz kod serwera jest poprawny, to Chrome nieprawidłowo zgłasza ten błąd w konsoli, gdy ustawiono automatyczne zapisywanie plików w lokalizacji.

 9
Author: JohnC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-10 17:08:03

Miałem podobny problem podczas pobierania pliku przez Javascript. Dodanie atrybutu download nie miało znaczenia, ale dodanie target= '_blank' nie robiło różnicy - nie otrzymuję już " zasobu zinterpretowanego jako dokument.../ align = "left" /

Oto mój ładnie prosty kod:

var link = document.createElement('a');
link.target = '_blank';
link.href = url;
document.body.appendChild(link); // Required for Firefox
link.click();
link.remove(); 

Nie próbowałem z bezpośrednim HTML, ale spodziewam się, że zadziała.

Uwaga odkryłem, że Firefox wymaga dodania linku do dokumentu, podczas gdy Chrome będzie działał bez niego.

 9
Author: Elliveny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-17 12:16:04

Napotkałem to, gdy przypisałem src= "image_url" w ramce iframe. Wydaje się, że iframe interpretuje go jako dokument, ale nim nie jest. Dlatego wyświetla ostrzeżenie.

 4
Author: Carmela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-09 10:28:27

Rozwiązałem problem przez adding target="_blank" do linku. Dzięki temu chrome otwiera nową kartę i ładuje plik PDF bez ostrzeżenia nawet w trybie responsywnym.

 3
Author: med,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-23 15:06:19

Po prostu natknąłem się na to i żadna z innych informacji, które mogłem znaleźć pomógł: to był głupi błąd: wysyłałem wyjście do przeglądarki przed rozpoczęciem pobierania pliku. Zaskakująco, nie znalazłem żadnych pomocnych błędów znalezionych (jak "nagłówki już wysłane" itp.). Mam nadzieję, że oszczędzi to komuś smutku!

 2
Author: user6096790,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-30 00:21:04

Miałem ten problem w projekcie strony ASP. Dodanie nagłówka "Content-Length" spowodowało, że pobieranie zaczęło działać ponownie w Chrome.

 1
Author: R. Salisbury,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-30 14:50:39

[[3]}ten problem pojawił się ponownie w wersji Chrome 61. Ale wydaje się, że jest naprawiony w Chrome 62.

Mam Rewriter jak poniżej

RewriteRule ^/ShowGuide/?$ https://<website>/help.pdf [L,NC,R,QSA]

W Chrome 61 plik PDF nie otwierał się, w konsoli wyświetlał komunikat

"Resource interpreted as Document but transferred with MIME type application/pdf: "

Próbowaliśmy dodać typ mime do reguły przepisywania, jak poniżej, ale to nie pomogło.

RewriteRule ^/ShowGuide/?$ https://<website>/help.pdf [L,NC,R,QSA, t:application/pdf]

Zaktualizowałem mój Chrome do najnowszej wersji 62 i znowu zaczął wyświetlać PDF. Ale wiadomość nadal jest w konsoli.

Z wszystkie inne przeglądarki, to było/działa dobrze.

 1
Author: Asif Nowaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-06 14:53:29

W moim przypadku nazwa pliku była zbyt długa i miał ten sam błąd. Po skróceniu poniżej 200 znaków działało dobrze. (limit może wynosić 250?)

 0
Author: holdfenytolvaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 08:36:19

Po kilku pobranych plikach csv (wielu testach) chrome zapytał, czy zezwolić na więcej pobrań z tej strony. Właśnie oddaliłem okno. Po tym chrome już nie ściągnął pliku, ale konsolę sayed:

"zasób zinterpretowany jako dokument, ale przesłany za pomocą typu MIME text / csv"

Mogę rozwiązać ten problem, uruchamiając ponownie chrome (całkowicie Ctrl-Shift-Q).

[Update] Nie wiem, dlaczego ten post został usunięty, ale dostarczył mi rozwiązania. Miałem otrzymałem wcześniej wiadomość o próbie pobrania wielu plików i musiał odpowiedzieć nie. Mam " zasób zinterpretowany..."wiadomość, dopóki nie uruchomiłem ponownie przeglądarki; wtedy działało idealnie. W niektórych przypadkach może to być właściwa odpowiedź.

 0
Author: paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-17 04:33:01

Dostałem ten błąd, ponieważ serwowałem z mojego systemu plików. Gdy zacząłem z serwerem http, chrome mógł to rozgryźć.

 0
Author: remydib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-02 21:01:57

Miałem ten sam problem z menedżerem pobierania, który stworzyłem. Problem polegał na tym, że nazwa pliku jest zbyt długa, a rozszerzenie obcięte.

Przykład: Nazwa pliku: protokoły organizacyjne i inne ważne rzeczy.pd

<?php
  header("Content-Disposition: attachment; filename=$File_Name");
?>

Rozwiązanie: zwiększono pole bazy danych MySQL do 255 w celu przechowywania nazwy pliku i sprawdzono długość przed zapisaniem obiektu blob. Jeśli długość > 255 przyciąć go do 250 i dodać rozszerzenie pliku.

 0
Author: eradima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-12 14:49:07

Spróbuj poniżej kodu i mam nadzieję, że to będzie działać dla Ciebie.

var Interval = setInterval(function () {
                if (ReportViewer) {
                    ReportViewer.prototype.PrintReport = function () {
                        switch (this.defaultPrintFormat) {
                            case "Default":
                                this.DefaultPrint();
                                break;
                            case "PDF":
                                this.PrintAs("PDF");
                                previewFrame = document.getElementById(this.previewFrameID);
                                previewFrame.onload = function () { previewFrame.contentDocument.execCommand("print", true, null); }
                                break;
                        }
                    };
                    clearInterval(Interval);
                }
            }, 1000);
 0
Author: Faraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-23 13:31:32

Miałem do czynienia z tym dzisiaj, i moim problemem było to, że mój znacznik Content-Disposition został błędnie ustawiony. Wygląda na to, że dla obu pdf & application/x-zip-compressed, powinieneś ustawić ją na inline zamiast attachment.

Aby ustawić nagłówek, Kod Javy wyglądałby tak:

...
String fileName = "myFileName.zip";
String contentDisposition = "attachment";
if ("application/pdf".equals(contentType)
    || "application/x-zip-compressed".equals(contentType)) {
    contentDisposition = "inline";
}
response.addHeader("Content-Disposition", contentDisposition + "; filename=\"" + fileName + "\"");
...
 0
Author: Olivier B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-02 16:07:20

Problem

Dosłownie cytuję Saeed Neamati ( https://stackoverflow.com/a/6587434/760777):

W nagłówku zapytania wysłałeś Content-Type: text / html, co oznacza, że chcesz zinterpretować odpowiedź jako HTML. Teraz, jeśli nawet serwer wysyła Ci pliki PDF, twoja przeglądarka próbuje zrozumieć go jako HTML.

Rozwiązanie

Wyślij cholerny poprawny nagłówek. Wyślij poprawny typ MIME pliku. Kropka!

Jak?

/ Align = "left" / To całkowicie zależy od tego, co robisz(OS, język).

Moim problemem był dynamicznie tworzony link do pobrania w javascript. Link służy do pobierania pliku mp3. Plik mp3 nie jest dokumentem, ani plik pdf, zip, plik flac, a lista jest długa.

Więc stworzyłem link w ten sposób:

<form method="get" action="test.mp3"> 
  <a href="#" onclick="this.closest(form).submit();return false;" target="_blank">
    <span class="material-icons">
      download
    </span>
  </a>
</form>

I zmieniłem to na to:

<form method="get" action="test.mp3" enctype="multipart/form-data"> 
  <a href="#" onclick="this.closest(form).submit();return false;" target="_blank">
    <span class="material-icons">
      download
    </span>
  </a>
</form>
Problem rozwiązany. Dodawanie an rozwiązał to dodatkowy atrybut znacznika formularza. Ale nie ma ogólnego rozwiązania. Istnieje wiele różnych scenariuszy. Gdy wysyłasz Plik z serwera (utworzyłeś go dynamicznie w języku takim jak CX#, Java, PHP), musisz wysłać z nim poprawny nagłówek(y).

Uwaga: i uważaj, aby niczego nie wysyłać (SMS!) przed wysłaniem nagłówka (ów).

 0
Author: RWC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-11 19:08:50

Problem

Miałem podobny problem. Got message in js

Zasób zinterpretowany jako dokument, ale przesłany za pomocą typu MIME text / csv

Ale dostałem też wiadomość w konsoli chrome

Mieszna Treść: strona w "https://my-site /' was loaded przez bezpieczne połączenie, ale plik w 'https://my-site/Download?id = 99a50c7b" został przekierowany przez niezabezpieczone połączenie. Ten plik powinien być serwowane przez HTTPS. Ten plik został blocked

Tu jest napisane, że musisz użyć bezpiecznego połączenia (ale schemat jest https w wiadomości już, o dziwo...).

Problem w tym, że href do pobierania plików zbudowany po stronie serwera. A ten href uĺźywaĺ ' http w moim przypadku.

Rozwiązanie

Więc zmieniłem schemat na https podczas budowania href do pobierania plików.

 0
Author: milkyWay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-13 11:15:23

Dostałem ten sam błąd, rozwiązaniem było umieszczenie atrybutu

target = "_ blank"

Wreszcie:

<a href="/uploads/file.*" target="_blank">Download</a>

Gdzie * jest rozszerzeniem pliku do pobrania.

 -1
Author: Alexander Ramos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-11 16:32:15