Jika misalnya Anda mengikuti tautan:
data:application/octet-stream;base64,SGVsbG8=
Browser akan meminta Anda untuk mengunduh file yang terdiri dari data yang disimpan sebagai base64 di hyperlink itu sendiri. Apakah ada cara untuk menyarankan nama default di markup? Jika tidak, apakah ada solusi JavaScript?
data:application/pdf;name=document.pdf;base64,BASE64_DATA_ENCODED
Jawaban:
Gunakan
download
atribut:Hidup misalnya pada html5-demos.appspot.com / ... .
Saat ini berfungsi pada Chrome, Firefox, Edge, Opera, dan desktop Safari tetapi tidak untuk iOS Safari atau IE11.
sumber
window.location.replace
. jika Anda ingin membuat data: uri atau yang dihasilkan olehwindow.URL.createObjectURL
, dan mengunduhnya sebagai file, Anda harus membuat <a> dan mengkliknya: jsfiddle.net/flyingsheep/wpQtH (tidak,$(...).click()
tidak berfungsi)$('<a href="data:text/plain,Test" download="test.txt">')[0].click()
tampaknya berfungsi dengan baik di sini (Chrome 23) (catatan: Saya menggunakanclick
metode asli , bukan jQuery's). Demo: jsfiddle.net/2zsRWChrome membuat ini sangat sederhana hari ini:
sumber
Hanya HTML: gunakan
download
atribut:Hanya Javascript: Anda dapat menyimpan data URI apa pun dengan kode ini:
Chrome, Firefox, dan Edge 13+ akan menggunakan nama file yang ditentukan.
IE11, Edge 12, dan Safari 9 (yang tidak mendukung
download
atribut ) akan mengunduh file dengan nama default mereka atau mereka hanya akan menampilkannya di tab baru, jika itu jenis file yang didukung: gambar, video, file audio , ...sumber
downloadjs
pada npmdata:
URI, yang disebut oleh pertanyaan itu. Jawaban ini juga bekerja dengan Blobs dan apa pun yang memiliki URIMenurut RFC 2397 , tidak, tidak ada.
Ada juga tidak muncul untuk menjadi setiap atribut dari<a>
elemen yang Anda dapat menggunakan salah.Namun HTML5 kemudian memperkenalkan
download
atribut pada<a>
elemen, meskipun pada saat penulisan dukungan tidak universal (tidak ada dukungan MSIE, misalnya)sumber
Saya telah melihat sedikit sumber firefox di netwerk / protokol / data / nsDataHandler.cpp
pengendali data hanya mem-parsing konten / tipe dan charset, dan terlihat jika ada "; base64" di dalam string
rfc tidak menentukan nama file dan setidaknya firefox tidak menangani nama file untuk itu, kode menghasilkan nama acak ditambah ".part"
Saya juga sudah memeriksa log firefox
file yang menarik jika Anda ingin melihat sumber mozilla:
Saya pikir Anda dapat berhenti mencari solusi untuk saat ini, karena saya curiga tidak ada :)
seperti yang terlihat di utas ini html5 memiliki
download
atribut, ia bekerja juga di firefox 20 http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-downloadsumber
Cuplikan Javascript berikut berfungsi di Chrome dengan menggunakan atribut tautan 'unduh' baru dan mensimulasikan klik.
Dan contoh berikut menunjukkan penggunaannya:
sumber
Tidak.
Seluruh tujuannya adalah bahwa ini adalah datastream, bukan file. Sumber data seharusnya tidak memiliki pengetahuan tentang agen pengguna yang menanganinya sebagai file ... dan tidak.
sumber
data:
adalah untuk memalsukan blok data internal ke dalam format URL tanpa harus membacanya dari sumber berbasis protokol. Tautan dalam jawaban @ silex menunjukkan bahwa kemampuan untuk menyarankan nama yang disukai untuk menuliskannya dianggap bermanfaat, bahkan jika belum diimplementasikan.data:
secara khusus diciptakan untuk memungkinkan (kecil) konten inline untuk muncul dalam format URL yang dikaburkan sehingga dapat digunakan oleh hal-hal seperti tag gambar tanpa permintaan HTTP terpisah. HTML mengatakan kontenimg src
atribut harus berupa URL, jadi itulah yang dibuat RFC 2397. Tidak ada "sumber data".Anda dapat menambahkan atribut unduhan ke elemen jangkar.
Sampel:
sumber
Lihatlah tautan ini: http://lists.w3.org/Archives/Public/uri/2010Feb/0069.html
Mengutip:
Juga ada beberapa info dalam pesan-pesan sisa diskusi.
sumber
Menggunakan pekerja layanan , ini akhirnya mungkin dalam arti yang sebenarnya.
<a href, <img src
, window.open (url), benar-benar segala sesuatu yang dapat dilakukan dengan URL "nyata".Browser sekarang akan menyarankan myPrettyName.jpg bahkan jika pengguna membuka file di tab baru, dan mencoba untuk menyimpannya di sana. Ini akan persis seperti jika file itu berasal dari server.
sumber
Ada skrip solusi kecil di Google Code yang berfungsi untuk saya:
http://code.google.com/p/download-data-uri/
Itu menambahkan formulir dengan data di dalamnya, mengirimkannya dan kemudian menghapus formulir itu lagi. Meretas, tetapi itu berhasil bagi saya. Membutuhkan jQuery.
Utas ini muncul di Google sebelum laman Kode Google dan saya pikir mungkin ada gunanya memiliki tautan di sini juga.
sumber
data:...
URI, skrip itu membuat formulir untuk POST ke server. Dan server kemudian mungkin menggemakannya langsung sebagai respons "unduh" HTTP (yaitu dengan header Content-Disposition yang sesuai menentukan nama file).Ini adalah versi jQuery yang didasarkan pada versi Holf dan bekerja dengan Chrome dan Firefox sedangkan versinya tampaknya hanya berfungsi dengan Chrome. Agak aneh menambahkan sesuatu ke tubuh untuk melakukan ini, tetapi jika seseorang memiliki pilihan yang lebih baik saya akan melakukannya.
sumber
$().appendTo()
ke variabel lalu memanggilvariable.click(); variable.remove()
[0]
dari "elemen jQuery" apa pun harus mengembalikan elemen DOM pertama yang diwakilinya, yang pada dasarnya "membawa Anda keluar dari" jQuery.Ini semacam peretasan, tapi saya pernah mengalami situasi yang sama sebelumnya. Saya secara dinamis menghasilkan file teks dalam javascript dan ingin menyediakannya untuk diunduh dengan menyandikannya dengan data-URI.
Ini dimungkinkan dengan intervensi pengguna utama
minor. Buat tautan<a href="data:...">right-click me and select "Save Link As..." and save as "example.txt"</a>
. Seperti yang saya katakan, ini tidak elegan, tetapi berfungsi jika Anda tidak memerlukan solusi profesional.Ini bisa dibuat lebih tidak menyakitkan dengan menggunakan flash untuk menyalin nama ke clipboard terlebih dahulu. Tentu saja jika Anda membiarkan diri Anda menggunakan Flash atau Java (sekarang dengan dukungan browser yang semakin sedikit, saya kira?), Anda mungkin bisa menemukan cara lain untuk melakukan ini.
sumber
download
untuk menyarankan nama seperti yang disebutkan oleh banyak jawaban lain .Ini berfungsi dengan Firefox 43.0 (lebih tua tidak diuji):
dl.js:
dl.html
Jika tombol diklik maka ditawarkan file bernama hello.bin untuk diunduh. Triknya adalah menggunakan File alih-alih Blob .
referensi: https://developer.mozilla.org/de/docs/Web/API/File
sumber
sumber
Anda sebenarnya dapat mencapai ini, di Chrome dan FireFox.
Coba url berikut, ini akan mengunduh kode yang digunakan.
sumber