Apakah ada cara saya dapat membuat file teks di sisi klien dan meminta pengguna untuk mengunduhnya, tanpa interaksi dengan server? Saya tahu saya tidak bisa menulis langsung ke mesin mereka (keamanan dan semuanya), tetapi bisakah saya membuat dan meminta mereka untuk menyimpannya?
javascript
file
web-applications
client-side
Joseph Silber
sumber
sumber
Jawaban:
Anda dapat menggunakan URI data. Dukungan browser bervariasi; lihat Wikipedia . Contoh:
Oktet-stream adalah untuk memaksa prompt pengunduhan. Kalau tidak, mungkin akan terbuka di browser.
Untuk CSV, Anda dapat menggunakan:
Coba demo jsFiddle .
sumber
Solusi sederhana untuk browser siap HTML5 ...
Pemakaian
sumber
download
atribut Anda dapat menentukan nama file ;-)txt
ekstensi jika Anda tidak memberikan ekstensi dalam nama file. Jika Anda melakukannya,download("data.json", data)
itu akan berfungsi seperti yang diharapkan.Semua solusi di atas tidak berfungsi di semua browser. Inilah yang akhirnya berfungsi pada IE 10+, Firefox dan Chrome (dan tanpa jQuery atau pustaka lainnya):
Perhatikan bahwa, tergantung pada situasi Anda, Anda mungkin juga ingin memanggil URL.revokeObjectURL setelah menghapus
elem
. Menurut dokumen untuk URL.createObjectURL :sumber
Failed: network error
Chrome. Yang ini berfungsi dengan baik.Semua contoh di atas berfungsi dengan baik di chrome dan IE, tetapi gagal di Firefox. Harap pertimbangkan untuk menambahkan jangkar ke badan dan menghapusnya setelah klik.
sumber
a.click()
telepon karena menganggap URL gumpalan adalah lintas-asal.Saya senang menggunakan FileSaver.js . Kompatibilitasnya cukup bagus (IE10 + dan yang lainnya), dan sangat mudah digunakan:
sumber
<a>
.Metode berikut berfungsi di IE11 +, Firefox 25+ dan Chrome 30+:
Lihat ini di Action: http://jsfiddle.net/Kg7eA/
Firefox dan Chrome mendukung URI data untuk navigasi, yang memungkinkan kami membuat file dengan menavigasi ke data URI, sementara IE tidak mendukungnya untuk tujuan keamanan.
Di sisi lain, IE memiliki API untuk menyimpan gumpalan, yang dapat digunakan untuk membuat dan mengunduh file.
sumber
Solusi ini diekstraksi langsung dari repositori github tiddlywiki's (tiddlywiki.com). Saya telah menggunakan tiddlywiki di hampir semua browser dan berfungsi seperti pesona:
Github repo: Unduh modul saver
sumber
Solusi yang bekerja pada IE10: (Saya membutuhkan file csv, tapi cukup untuk mengubah jenis dan nama file menjadi txt)
sumber
Jika Anda hanya ingin mengonversi string yang tersedia untuk diunduh, Anda dapat mencoba ini menggunakan jQuery.
sumber
Paket js-file-download dari github.com/kennethjiang/js-file-download menangani kasus tepi untuk dukungan browser:
Lihat sumber untuk melihat bagaimana menggunakan teknik yang disebutkan di halaman ini.
Instalasi
Pemakaian
sumber
Seperti disebutkan sebelumnya, filesaver adalah paket yang bagus untuk bekerja dengan file di sisi klien. Tapi, itu tidak baik dengan file besar. StreamSaver.js adalah solusi alternatif (yang ditunjukkan dalam FileServer.js) yang dapat menangani file besar:
sumber
sumber
Pada April 2014, FileSytem APIs mungkin tidak distandarisasi dalam W3C. Siapa pun yang melihat solusi dengan gumpalan harus memasang dengan hati-hati, saya kira.
Batu HTML5 mengarah ke atas
Milis W3C pada FileSytem API
sumber
Berdasarkan jawaban @Rick yang sangat membantu.
Anda harus mencetak string
data
jika ingin membagikannya dengan cara ini:`Maaf saya tidak bisa mengomentari jawaban @Rick karena reputasi saya yang rendah di StackOverflow.
Sebuah mengedit saran dibagi dan ditolak.
sumber
Kita dapat menggunakan api URL , khususnya URL.createObjectURL () , dan Blob api untuk menyandikan dan mengunduh apa saja.
Jika unduhan Anda kecil, ini berfungsi dengan baik:
Jika unduhan Anda besar, alih-alih menggunakan DOM, cara yang lebih baik adalah membuat elemen tautan dengan parameter unduhan, dan memicu klik.
Perhatikan bahwa elemen tautan tidak ditambahkan ke dokumen tetapi klik itu berfungsi! Ini dimungkinkan untuk membuat unduhan ratusan Mo dengan cara ini.
Bonus! Unduh objek siklik apa pun , hindari kesalahan:
Menggunakan https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
Pada contoh ini, mengunduh
document
objek sebagai json.sumber
Anda bahkan dapat melakukan yang lebih baik daripada hanya URI - menggunakan Chrome Anda juga dapat menyarankan nama file yang akan diambil, seperti dijelaskan dalam posting blog ini tentang penamaan unduhan saat menggunakan URI .
sumber
Fungsi di bawah ini berfungsi.
sumber
Metode berikut berfungsi di IE10 +, Edge, Opera, FF dan Chrome:
Jadi, panggil saja fungsinya:
sumber
Bagi saya ini berfungsi dengan baik, dengan nama file dan ekstensi yang sama diunduh
<a href={"data:application/octet-stream;charset=utf-16le;base64," + file64 } download={title} >{title}</a>
'title' adalah nama file dengan ekstensi yaitu,
sample.pdf
,waterfall.jpg
, dll ..'file64' adalah konten base64 seperti ini yaitu,
Ww6IDEwNDAsIFNsaWRpbmdTY2FsZUdyb3VwOiAiR3JvdXAgQiIsIE1lZGljYWxWaXNpdEZsYXRGZWU6IDM1LCBEZW50YWxQYXltZW50UGVyY2VudGFnZTogMjUsIFByb2NlZHVyZVBlcmNlbnQ6IDcwLKCFfSB7IkdyYW5kVG90YWwiOjEwNDAsIlNsaWRpbmdTY2FsZUdyb3VwIjoiR3JvdXAgQiIsIk1lZGljYWxWaXNpdEZsYXRGZWUiOjM1LCJEZW50YWxQYXltZW50UGVyY2VudGFnZSI6MjUsIlByb2NlZHVyZVBlcmNlbnQiOjcwLCJDcmVhdGVkX0J5IjoiVGVycnkgTGVlIiwiUGF0aWVudExpc3QiOlt7IlBhdGllbnRO
sumber
Saya akan menggunakan
<a></a>
tag kemudian mengaturhref='path'
. Setelah itu, tempatkan gambar di antara<a>
elemen - elemen tersebut sehingga saya dapat memiliki visual untuk melihatnya. Jika ingin, Anda dapat membuat fungsi yang akan mengubahhref
sehingga tidak hanya menjadi tautan yang sama tetapi menjadi dinamis.Berikan
<a>
tagid
juga jika Anda ingin mengaksesnya dengan javascript.Dimulai dengan Versi HTML:
Sekarang dengan JavaScript:
sumber
Jika file berisi data teks, teknik yang saya gunakan adalah memasukkan teks ke dalam elemen textarea dan meminta pengguna untuk memilihnya (klik pada textarea lalu ctrl-A) kemudian salin diikuti oleh tempel ke editor teks.
sumber