Dengan Chrome 12.0.742.112, jika saya mengarahkan ulang dengan header berikut:
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
Yang jika diikuti mengembalikan header berikut:
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 tidak akan mengalihkan, atau mengubah halaman sebelumnya, itu hanya akan melaporkan peringatan berikut di konsol:
Sumber daya diartikan sebagai Dokumen tetapi ditransfer dengan aplikasi / zip tipe MIME.
Prosesnya berfungsi dengan benar di Firefox, dan juga berfungsi dengan baik di Chrome jika saya membuka tab baru dan langsung menuju http://0.0.0.0:3000/files/download.zip
. Apakah saya melakukan sesuatu yang salah, atau ini bug / kekhasan Chrome?
javascript
google-chrome
Ashley Williams
sumber
sumber
Jawaban:
Anda dapat menentukan atribut unduhan HTML5 di tag <a> Anda.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download
sumber
Di tajuk permintaan Anda, Anda telah mengirim
Content-Type: text/html
yang artinya Anda ingin menafsirkan respons sebagai HTML. Sekarang bahkan jika server mengirim Anda file PDF, browser Anda mencoba memahaminya sebagai HTML. Itulah masalahnya. Saya mencari tahu alasannya. :)sumber
Content-Type: application/zip
tidak berhasil, masih mencoba memprosesnya sebagai 'Dokumen'. Mungkin juga patut menunjukkan bahwa URL zip dinamis di aplikasi saya, jadi tidak ada hubungannya dengan caching.Accept
tajuk permintaan sepertitext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
, mungkin? Saya benar-benar bingung di sini, saya benar-benar!text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
sana ada bagian yang mengatakan bahwa Chrome menerima hampir semuanya (*/*
).Saya mengalami masalah ini ketika menyajikan file PDF (aplikasi tipe MIME / pdf) dan menyelesaikannya dengan mengatur header Content-Disposition, misalnya:
Semoga itu bisa membantu.
sumber
Saya sudah memperbaiki ini ... dengan hanya membuka tab baru.
Mengapa itu tidak berfungsi, saya tidak sepenuhnya yakin, tapi itu bisa ada hubungannya dengan bagaimana Chrome menangani beberapa unduhan pada satu halaman, mungkin mereka berpikir itu adalah spam dan mengabaikannya.
sumber
Saya tidak dapat menemukan penjelasan apa pun dari pesan itu sendiri. Inilah interpretasi saya.
Sejauh yang saya mengerti, Chrome mengharapkan beberapa materi yang dapat ditampilkan ( dokumen ), tetapi Chrome memperoleh sesuatu yang tidak dapat ditampilkan (atau sesuatu yang diperintahkan untuk tidak ditampilkan).
Ini adalah pertanyaan tentang bagaimana dokumen dideklarasikan pada tingkat halaman HTML di
href
(lihatdownload
atribut dalam pesan Roy) dan bagaimana ia dideklarasikan di dalam jawaban server dengan cara HTTP header (khususnyaContent-Disposition
). Ini adalah masalah kontrak , yang bertentangan dengan harapan dan harapan.Untuk melanjutkan perjalanan Evan, saya telah mengalaminya:
adalah hanya tidak konsisten dengan:
Chrome akan berteriak Resource ditafsirkan sebagai dokumen tetapi ditransfer ...
Sebenarnya, disposisi lampiran hanya berarti ini: browser tidak akan menafsirkan tautan, melainkan menyimpannya di suatu tempat untuk tujuan lain yang tersembunyi. Di sini di atas,
download
ada yang hilang di sampinghref
, atauContent-disposition
harus dihapus dari header. Itu tergantung pada apakah kita ingin browser membuat dokumen atau tidak.Semoga ini membantu.
sumber
Saya mengalami masalah yang sama hari ini dengan Versi Chrome 30.0.1599.66 dengan aplikasi node.js / express.js saya.
Header yang benar, mengungkapkan set dengan benar secara otomatis, ia bekerja di browser lain seperti yang ditunjukkan, menempatkan html 5 'download' atribut tidak tekad, apa yang lakukan tekad itu akan menjadi pengaturan lanjutan krom dan memeriksa kotak "Tanyakan lokasi penyimpanan setiap file sebelum mengunduh ".
Setelah itu tidak ada kesalahan "Sumberdaya ditafsirkan sebagai dokumen ...." dilaporkan seperti dalam judul masalah ini sehingga tampaknya kode server kami benar, itu adalah Chrome yang salah melaporkan kesalahan itu di konsol ketika diatur untuk menyimpan file ke lokasi secara otomatis.
sumber
Saya memiliki masalah serupa ketika melakukan pengunduhan file melalui Javascript. Menambahkan atribut unduhan tidak membuat perbedaan tetapi menambahkan target = '_ blank' berhasil - Saya tidak lagi mendapatkan pesan konsol 'Sumberdaya diartikan sebagai Dokumen ...'.
Ini kode sederhana saya:
Saya belum mencobanya dengan HTML langsung tetapi akan berharap itu berfungsi.
Catatan saya menemukan bahwa Firefox mengharuskan tautan ditambahkan ke dokumen sedangkan Chrome akan bekerja tanpa itu.
sumber
Saya mengalami ini ketika saya menetapkan src = "image_url" di iframe. Tampaknya iframe mengartikannya sebagai dokumen tetapi tidak. Itu sebabnya ini menampilkan peringatan.
sumber
var photoData = new FormData();
dan kemudian mengatur properticontentType: false
di permintaan ajax saya. Permintaan posting adalah:Content-Disposition: form-data;
Dan tipe kontenContent-Type: text/html
Saya memecahkan masalah dengan
adding target="_blank"
tautan. Dengan ini, chrome membuka tab baru dan memuat PDF tanpa peringatan bahkan dalam mode responsif.sumber
window.open(href, '_blank');
dan tab baru otomatis ditutup setelah pengunduhan.Saya memiliki masalah ini dalam proyek situs web ASP. Menambahkan tajuk "Panjang Konten" menyebabkan unduhan mulai bekerja lagi di Chrome.
sumber
Masalah ini muncul kembali di versi Chrome 61. Tapi sepertinya sudah diperbaiki di Chrome 62.
Saya punya Aturan Rewrite seperti di bawah ini
Dengan Chrome 61, PDF tidak terbuka, di konsol itu menampilkan pesan
Kami mencoba menambahkan tipe mime dalam aturan penulisan ulang seperti di bawah ini tetapi tidak membantu.
Saya telah memperbarui Chrome saya ke versi 62 terbaru dan mulai menampilkan PDF lagi. Tapi pesannya masih ada di konsol.
Dengan semua browser lain, itu / sedang berfungsi dengan baik.
sumber
Hanya berlari ke ini dan tidak ada informasi lain yang saya temukan membantu: itu adalah kesalahan bodoh: Saya mengirim output ke browser sebelum memulai unduhan file. Anehnya, saya tidak menemukan kesalahan yang membantu ditemukan (seperti "header sudah dikirim" dll.). Mudah-mudahan, ini menyimpan kesedihan orang lain!
sumber
Dalam kasus saya nama file terlalu panjang, dan mendapat kesalahan yang sama. Setelah dipersingkat di bawah 200 karakter bekerja dengan baik. (batasnya mungkin 250?)
sumber
Saya mendapatkan kesalahan ini karena saya melayani dari sistem file saya. Setelah saya mulai dengan chrome server http bisa mengetahuinya.
sumber
Saya mengalami masalah yang sama dengan pengelola unduhan yang saya buat. Masalahnya saya melibatkan nama file yang terlalu panjang dan ekstensi terpotong.
Contoh: Nama File: Protokol Organisasi dan Hal-Hal Lain yang Penting.pd
Solusi: Tingkatkan bidang database MySQL ke 255 untuk menyimpan nama file, dan lakukan pemeriksaan panjang sebelum menyimpan gumpalan. Jika panjang> 255 pangkas menjadi 250 dan tambahkan ekstensi file.
sumber
Coba kode di bawah ini dan saya harap ini akan berhasil untuk Anda.
sumber
Saya menghadapi ini hari ini, dan masalah saya adalah bahwa
Content-Disposition
tag saya salah diatur. Sepertinya untuk keduanyapdf
&application/x-zip-compressed
, Anda seharusnya mengaturnyainline
alih-alihattachment
.Jadi untuk mengatur tajuk Anda, kode Java akan terlihat seperti ini:
sumber