Saya bermain-main dengan ide untuk membuat utilitas zip / unzip berbasis JavaScript yang dapat diakses siapa pun dari browser. Mereka cukup menyeret zip mereka langsung ke browser dan itu akan memungkinkan mereka mengunduh semua file di dalamnya. Mereka juga dapat membuat file zip baru dengan menyeret file satu per satu.
Saya tahu akan lebih baik melakukannya di sisi server, tetapi proyek ini hanya untuk sedikit kesenangan.
Menarik file ke browser seharusnya cukup mudah jika saya memanfaatkan berbagai metode yang tersedia. (Gaya Gmail)
Encoding / decoding semoga baik-baik saja. Saya telah melihat beberapa perpustakaan zip as3 jadi saya yakin saya harus baik-baik saja dengan itu.
Masalah saya adalah mengunduh file di bagian akhir.
window.location = 'data:jpg/image;base64,/9j/4AAQSkZJR....'
ini berfungsi dengan baik di firefox tetapi tidak di chrome.
Saya dapat menyematkan file sebagai gambar dengan baik di chrome menggunakan <img src="data:jpg/image;ba.." />
, tetapi file tidak harus berupa gambar. Mereka bisa dalam format apapun.
Adakah yang bisa memikirkan solusi lain atau semacam solusi?
sumber
Jawaban:
Ide ide:
Coba
<a href="data:...." target="_blank">
(Belum Teruji)Gunakan downloadify alih-alih URL data (juga akan berfungsi untuk IE)
sumber
Jika Anda juga ingin memberikan nama yang disarankan untuk file tersebut (alih-alih 'unduh' default), Anda dapat menggunakan yang berikut ini di Chrome, Firefox, dan beberapa versi IE:
Dan contoh berikut menunjukkan kegunaannya:
sumber
link.click()
alih - alih -fungsi AndaeventFire
... jsfiddle.net/ARTsinn/Ezx5matau:
sumber
Ingin berbagi pengalaman saya dan membantu seseorang terjebak pada unduhan yang tidak berfungsi di Firefox dan memperbarui jawaban untuk 2014. Cuplikan di bawah ini akan berfungsi di firefox dan chrome dan itu akan menerima nama file:
sumber
download
atribut tersebut. Terima kasih, ini sedekat yang bisa saya dapatkan saat ini.btoa
tidak ditentukan (misalnya dalam proyek frontend node eslint)const btxt = new Buffer(text).toString('base64'); const uri = 'data:text/csv;charset=utf-8;base64,' + btxt + ';'
Berikut adalah solusi JavaScript murni yang saya uji berfungsi di Firefox dan Chrome tetapi tidak di Internet Explorer:
Solusi lintas browser ditemukan hingga sekarang:
downloadify -> Membutuhkan Flash
databounce -> Diuji di IE 10 dan 11, dan tidak berhasil untuk saya. Membutuhkan servlet dan beberapa kustomisasi. (Salah mendeteksi navigator. Saya harus mengatur IE dalam mode kompatibilitas untuk menguji, charset default di servlet, objek opsi JavaScript dengan jalur servlet yang benar untuk jalur absolut ...) Untuk browser non-IE, ini membuka file di jendela yang sama.
download.js -> http://danml.com/download.html Pustaka lain yang serupa tetapi belum diuji. Mengklaim sebagai JavaScript murni, tidak memerlukan servlet atau Flash, tetapi tidak berfungsi di IE <= 9.
sumber
Ada beberapa solusi tetapi mereka bergantung pada HTML5 dan belum diterapkan sepenuhnya di beberapa browser. Contoh di bawah telah diuji di Chrome dan Firefox (sebagian berfungsi).
document.location.href
ke URI data.<a href="your-data-uri" download="filename.txt">
untuk menentukan nama file.sumber
Menggabungkan jawaban dari @owencm dan @ Chazt3n, fungsi ini memungkinkan pengunduhan teks dari IE11, Firefox, dan Chrome. (Maaf, saya tidak memiliki akses ke Safari atau Opera, tapi tolong tambahkan komentar jika Anda mencoba dan berhasil.)
sumber
Untuk siapa pun yang mengalami masalah di IE:
Silakan pilih jawabannya di sini oleh Yetti: menyimpan kanvas secara lokal di IE
sumber
Masalah Anda pada dasarnya bermuara pada "tidak semua browser mendukung ini".
Anda dapat mencoba solusi dan menyajikan file yang telah dibuka zipnya dari objek Flash, tetapi kemudian Anda akan kehilangan kemurnian hanya-JS (bagaimanapun, saya tidak yakin apakah Anda saat ini dapat "menyeret file ke browser" tanpa solusi Flash - apakah itu mungkin fitur HTML5?)
sumber