Kaynak Belge olarak yorumlandı ancak MIME türü uygulama / zip ile aktarıldı


201

Chrome 12.0.742.112 ile, aşağıdaki başlıklarla yönlendirme yaparsam:

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

Takip edilirse aşağıdaki üstbilgiyi döndürür:

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 bir önceki sayfayı yönlendirmez veya değiştirmez, yalnızca konsolda aşağıdaki uyarıyı bildirir:

Kaynak Belge olarak yorumlandı ancak MIME türü uygulama / zip ile aktarıldı.

İşlem Firefox'ta düzgün çalışıyor ve yeni bir sekme açıp doğrudan adresine gidersem Chrome'da da iyi çalışıyor http://0.0.0.0:3000/files/download.zip. Yanlış bir şey mi yapıyorum yoksa bu bir Chrome hatası mı?


Yanıtlar:


168

<a> etiketinizde HTML5 indirme özelliğini belirleyebilirsiniz .

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

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


3
"download" özelliği ie veya başka bir tarayıcıda desteklenmez. Başka seçenekleriniz varsa lütfen bana yardım edin
Renish Khunt

3
Bu, Chrome'u düzeltir, ancak diğer tarayıcıları bozar. Android telefonum bu tür bağlantılardan indirilmeyecek.
Betty

38
iç çekmek. BU 'DÜZELTME' ÇOK TARAYICILAR İÇİN ÇALIŞMAZ - sadece Chrome. Ve 2016, bu yüzden yakında da beklemeyin.
a20

2
Chrome 2019'da fark yaratmıyor
Michael Rogers

17
@ all Bu 2035 (gelecekten geldim) ve bunu destekleyecek bilgisayar yok.
Ali Farhoudi

34

İstek üstbilginizde, Content-Type: text/htmlyanıtı HTML olarak yorumlamak istediğiniz anlamına gelir. Şimdi sunucu size PDF dosyaları gönderse bile, tarayıcınız dosyayı HTML olarak anlamaya çalışır. İşte sorun bu. Nedenin ne olabileceğini görmek için arıyorum. :)


Ben Content-Type: application/zipboşuna olduğu gibi göndermeye çalıştım , hala bir 'Belge' olarak işlemeye çalışır. Ayrıca, zip URL'sinin uygulamamda dinamik olduğunu da belirtmek gerekir, bu nedenle önbellekleme ile ilgisi yoktur.
Ashley Williams

1
Teşekkürler! Belki de Acceptistek üstbilgisini Chrome'un göndermesi ile ilgili bir şey olabilir text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8mi? Kesinlikle burada boğuldum, gerçekten öyleyim!
Ashley Williams

5
Hayır, text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Chrome'un neredeyse her şeyi kabul ettiğini söyleyen bir bölüm var ( */*).
Saeed Neamati

3
Neden bahsediyorsun? Soruda herhangi bir istek başlığı yok. Her ikisi de yanıt başlıklarıdır.
DoubleDown

1
Ve ben burada oturuyorum, bunun neden bir cevap olması gerektiğini ama bir yorum olmaması gerektiğini merak ediyorum.
gösterge paneli

24

Bir PDF dosyasını (MIME türü uygulama / pdf) sunarken bu sorunu yaşadım ve İçerik-Disposition başlığını ayarlayarak çözdüm, örneğin:

Content-Disposition: attachment; filename=foo.pdf

Umarım yardımcı olur.


11
ama bunu nereye yazmalıyım?
hud

4
@coder Bunun gibi başlıkları web sunucunuzdan eklersiniz. Bunun için ne kullandığınızdan emin değilsiniz, bu yüzden daha fazla bilgi vermek zor. Sunucunuz için hangi dili veya çerçeveyi kullanıyorsunuz?
Evan

7
Bunu başlıklarımızda bulundurun, ancak Chrome hala uyarıyı atıyor
Adam Reis

nopes krom bir şey düzeltmez Sürüm 76.0.3809.132 (Resmi Derleme) (64-bit) zaten başlıkları bağlı var
Muhammad Omer Aslam

23

Bunu düzelttim… sadece yeni bir sekme açarak.

Neden çalışmadı Tamamen emin değilim, ancak Chrome'un bir sayfada birden fazla indirme ile nasıl başa çıktığıyla ilgili bir şey olabilir, belki de spam olduklarını düşündüler ve onları görmezden geldiler.


6
Ne demek "yeni bir sekme açtı" ??? Manuel olarak yeni bir tarayıcı penceresi açtınız ve indirme URL'sini buraya yapıştırdınız mı?
Tony R

2
Evet kesinlikle. Belirli bir sekmenin uygulama durumunda bir hata olduğunu varsaydım.
Ashley Williams

52
Kullanıcının yeni bir sekme açmasını beklemezdim ... Ve zarif bir dosya indirmek için bir tane açmayı bulamıyorum.
Yassir Ennazk

24
@Moram vd. ark. - indirme için bir sekme açmak ('_blank' hedefini kullanarak) - sorunu çözmez, sadece "Belge olarak girilen kaynak" konsol uyarı mesajını yeni bir sekmeye aktarır. Halının altına süpürmek bir çözüm değildir.
colm.anseo

1
Bu açıkça orijinal cevabı çözmez. Cidden ... Kullanıcı dokümanına "URL'yi kopyala, yeni bir sekme aç, URL'yi yapıştır, ..." ne koyardım? İşiniz bitti.
Telli Çocuk

22

Mesajın kendi başına bir açıklamasını hiçbir yerde bulamadım . İşte benim yorumum.

Anladığım kadarıyla, Chrome gösterebileceği bazı materyalleri (bir belge ) bekliyordu, ancak gösteremediği bir şey (veya göstermemesi söylendiği bir şey) elde etti.

Bu, hem belgenin HTML sayfa düzeyinde nasıl bildirildiği href( downloadRoy'un mesajındaki özniteliğe bakın ) hem de sunucunun yanıtı (özellikle HTTP başlıkları) aracılığıyla nasıl bildirildiği sorusudur Content-Disposition. Bu, umut ve beklentinin aksine bir sözleşme meselesidir .

Evan yolunda devam etmek için şunu deneyimledim:

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

ile tutarsız :

<a href='some.pdf'>

Chrome, kaynak belge olarak yorumlandı ancak aktarıldı ağlayacak

Aslında, ekin düzenlenmesi sadece şu anlama gelir: tarayıcı bağlantıyı yorumlamaz, daha ziyade başka bir yerde saklar. Yukarıda, ya downloadeksik hrefya Content-dispositionda başlıklardan kaldırılması gerekir. Tarayıcının belgeyi oluşturmasını isteyip istemediğimize bağlıdır.

Bu yardımcı olur umarım.


9

Aynı sorunu bugün node.js / express.js uygulamamla Chrome Sürüm 30.0.1599.66 ile de karşılaştım.

Başlıkları şunlardır doğru onları düzgün otomatik, bu koyarak belirtildiği gibi diğer tarayıcılarda çalışır setleri ifade html 5 'indir' nitelik değil çözmek, neyi yok did it krom gelişmiş ayarlarına giderek ve kutuyu kontrol ediyor kararlılığını "nereye kaydetmek için sor msgstr "% s:.

Olduğunu hiçbir "Kaynak belge olarak yorumlanır ...." sonra hata o görünecek şekilde bu konunun başlığında olarak rapor bizim sunucu kodu, 's seti kaydetmek için hatalı konsolunda bu hatayı bildiriyor' s Krom doğrudur dosyaları otomatik olarak bir konuma.


9

Javascript ile dosya indirme yaparken benzer bir sorun yaşadım. İndirme özniteliğinin eklenmesi hiçbir fark yaratmadı, ancak target = '_ blank' ekledi - Artık 'Kaynak Belge olarak yorumlandı ...' konsol iletisini almıyorum.

İşte benim güzel basit kod:

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

Doğrudan HTML ile denemedim ama çalışmasını beklerdim.

Not Firefox'un bağlantının belgeye eklenmesini gerektirdiğini, ancak Chrome'un onsuz çalışacağını keşfettim.


4
sadece bir uyarı, bir hedef = '_blank' IE 11'in pop-up önleme mekanizmasını tetikleyecek ...
RobM

4

Bir iframe içinde src = "image_url" atadığımda bu sorunla karşılaştım. Öyle görünüyor ki iframe bunu bir belge olarak yorumluyor ama öyle değil. Bu yüzden bir uyarı görüntüler.


lütfen bana nasıl düzelttiğini söyleyebilir misin? iframe kullanırken burada aynı sorunla karşı karşıya
olduğum gibi

Form verilerini kullandım: var photoData = new FormData(); ve sonra contentType: falseajax isteğimde özelliği ayarlayın . Mesaj isteği Content-Disposition: form-data;Content-Type: text/html
Carmela

3

Sorunu adding target="_blank"bağlantıya kadar çözdüm. Bununla, krom yeni bir sekme açar ve PDF'yi duyarlı modda bile uyarmadan yükler.


Bunu yaptım ve işe yaradı: window.open(href, '_blank');ve yeni sekme indirildikten sonra otomatik olarak kapanıyor.
Chad Richardson

1

Bir ASP web sitesi projesinde bu sorunu vardı. "İçerik Uzunluğu" başlığı eklemek, indirmelerin Chrome'da tekrar çalışmaya başlamasına neden oldu.


1

Bu sorun Chrome 61 sürümünde yeniden ortaya çıktı. Ancak Chrome 62'de düzeltilmiş gibi görünüyor.

Aşağıdaki gibi bir RewriteRule var

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

Chrome 61 ile PDF açılmıyordu, konsolda mesajı gösteriyordu

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

Yeniden yazma kuralına aşağıdaki gibi mime türü eklemeye çalıştık, ancak yardımcı olmadı.

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

Chrome'umu en son 62 sürüme güncelledim ve PDF'yi tekrar göstermeye başladı. Ancak mesaj hala konsolda.

Diğer tüm tarayıcılarda, iyi çalışıyor / çalışıyor.


1

Sadece bu içine koştu ve bulabildiğim diğer bilgilerin hiçbiri yardımcı oldu: aptalca bir hataydı: Dosya indirmeye başlamadan önce tarayıcıya çıktı gönderiyordum. Şaşırtıcı bir şekilde, hiçbir yararlı hata bulunamadı ("zaten gönderilen başlıklar" gibi). Umarım, bu başka birine biraz keder kazandırır!


0

Benim durumumda dosya adı çok uzundu ve aynı hatayı aldı. Bir kez 200 karakter kısaltılmış iyi çalıştı. (sınır 250 olabilir?)


0

Bu hatayı aldım çünkü dosya sistemimden sunum yapıyordum. Bir kez http sunucu krom ile başladım anladım.


0

Oluşturduğum bir indirme yöneticisiyle aynı sorunu yaşıyordum. Dosya adı çok uzun ve uzantı kırpılıyor dahil oldu sorun oldu.

Örnek: Dosya Adı: Kuruluş Protokolleri ve Önemli Diğer Şeyler.pd

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

Çözüm: Dosya adını saklamak için MySQL veritabanı alanını 255'e yükseltti ve blob'u kaydetmeden önce bir uzunluk kontrolü gerçekleştirin. Uzunluk> 255 ise 250'ye kesin ve dosya uzantısını ekleyin.


0

Aşağıdaki kodu deneyin ve umarım bu sizin için çalışır.

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

Bugün bununla karşılaştım ve sorunum Content-Disposition, etiketimin yanlış ayarlanmış olmasıydı. Her ikisi için de görünüyor pdf& yerine, application/x-zip-compressedayarlamanız gerekiyor .inlineattachment

Başlığınızı ayarlamak için Java kodu şöyle görünür:

...
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

Aynı hatayı aldım, çözüm özelliği koymaktı

target = "_ blank"

En sonunda :

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

*İndirilecek dosyanızın uzantısı nerede ?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.