Saya telah mengutak-atik WebGL akhir-akhir ini, dan membuat pembaca Collada berfungsi. Masalahnya, ini sangat lambat (Collada adalah format yang sangat verbose), jadi saya akan mulai mengonversi file ke format yang lebih mudah digunakan (mungkin JSON). Saya sudah memiliki kode untuk mem-parsing file dalam JavaScript, jadi saya dapat menggunakannya sebagai eksportir saya juga! Masalahnya adalah menabung.
Sekarang, saya tahu bahwa saya dapat mem-parsing file, mengirim hasilnya ke server, dan meminta browser meminta file kembali dari server sebagai unduhan. Namun pada kenyataannya server tidak ada hubungannya dengan proses khusus ini, jadi mengapa melibatkannya? Saya sudah memiliki konten file yang diinginkan dalam memori. Apakah ada cara agar saya dapat menyajikan kepada pengguna unduhan menggunakan JavaScript murni? (Aku meragukannya, tapi mungkin juga bertanya ...)
Dan untuk lebih jelasnya: Saya tidak mencoba mengakses sistem file tanpa sepengetahuan pengguna! Pengguna akan memberikan file (mungkin melalui seret dan jatuhkan), skrip akan mengubah file dalam memori, dan pengguna akan diminta untuk mengunduh hasilnya. Semua yang harus menjadi aktivitas "aman" sejauh browser yang bersangkutan.
[EDIT]: Saya tidak menyebutkannya di muka, jadi poster yang menjawab "Flash" cukup valid, tetapi bagian dari apa yang saya lakukan adalah upaya untuk menyoroti apa yang dapat dilakukan dengan HTML5 murni ... jadi Flash adalah langsung dalam kasus saya. (Meskipun itu jawaban yang benar-benar valid untuk siapa pun yang melakukan aplikasi web "nyata".) Karena itu, sepertinya saya kurang beruntung kecuali saya ingin melibatkan server. Bagaimanapun, terima kasih!
sumber
Jawaban:
OK, membuat data: URI pasti membantu saya, terima kasih kepada Matthew dan Dennkster yang menunjukkan opsi itu! Ini pada dasarnya bagaimana saya melakukannya:
1) dapatkan semua konten menjadi string yang disebut "konten" (misalnya dengan membuatnya di sana awalnya atau dengan membaca innerHTML dari tag halaman yang sudah dibangun).
2) Bangun data URI:
Akan ada batasan panjang tergantung pada jenis browser dll, tetapi misalnya Firefox 3.6.12 berfungsi hingga setidaknya 256k. Pengkodean dalam Base64 sebagai gantinya menggunakan komponen encodeURIC mungkin membuat hal-hal lebih efisien, tetapi bagi saya itu ok.
3) buka jendela baru dan "redirect" ke URI ini meminta lokasi unduhan halaman yang dihasilkan JavaScript saya:
Itu dia.
sumber
location.href
ke konten.location.href = uriContent
.location.href = "data:application/octet-stream," + encodeURIComponent(jQuery('#answer-4551467 .post-text').first().text());
dan itu akan menyimpan konten jawaban @ Nøk ke file. Saya tidak memiliki IE untuk mengujinya, tetapi berfungsi untuk webkit.Solusi sederhana untuk browser siap HTML5 ...
Pemakaian
sumber
HTML5 mendefinisikan
window.saveAs(blob, filename)
metode. Itu tidak didukung oleh browser apa pun sekarang. Tapi ada perpustakaan kompatibilitas yang disebut FileSaver.js yang menambahkan fungsi ini ke sebagian besar browser modern (termasuk Internet Explorer 10+). Internet Explorer 10 mendukungnavigator.msSaveBlob(blob, filename)
metode ( MSDN ), yang digunakan di FileSaver.js untuk dukungan Internet Explorer.Saya menulis posting blog dengan rincian lebih lanjut tentang masalah ini.
sumber
Menyimpan file besar
Long data URI dapat memberikan masalah kinerja di browser. Opsi lain untuk menyimpan file yang dihasilkan oleh sisi klien, adalah meletakkan kontennya di objek Blob (atau File) dan membuat tautan unduhan menggunakan
URL.createObjectURL(blob)
. Ini mengembalikan URL yang dapat digunakan untuk mengambil konten gumpalan. Gumpalan disimpan di dalam browser hinggaURL.revokeObjectURL()
dipanggil pada URL atau dokumen yang membuatnya ditutup. Sebagian besar browser web memiliki dukungan untuk URL objek , Opera Mini adalah satu-satunya yang tidak mendukungnya.Memaksa unduhan
Jika data berupa teks atau gambar, peramban dapat membuka file, alih-alih menyimpannya ke disk. Untuk menyebabkan file diunduh saat mengeklik tautan, Anda dapat menggunakan
download
atribut tersebut. Namun, tidak semua browser web memiliki dukungan untuk atribut unduhan . Pilihan lain adalah menggunakanapplication/octet-stream
sebagai tipe mime file, tetapi ini menyebabkan file tersebut disajikan sebagai gumpalan biner yang terutama tidak ramah pengguna jika Anda tidak atau tidak dapat menentukan nama file. Lihat juga ' Paksakan untuk membuka munculan "Simpan Sebagai ..." yang terbuka di klik tautan teks untuk pdf dalam HTML '.Menentukan nama file
Jika gumpalan dibuat dengan konstruktor File, Anda juga dapat mengatur nama file, tetapi hanya beberapa browser web (termasuk Chrome & Firefox) yang memiliki dukungan untuk konstruktor File . Nama file juga dapat ditentukan sebagai argumen untuk
download
atribut, tetapi ini tunduk pada satu ton pertimbangan keamanan . Internet Explorer 10 dan 11 menyediakan metode sendiri, msSaveBlob , untuk menentukan nama file.Kode contoh
sumber
msSaveBlob
untuk membuka dialog "Simpan sebagai". Untuk browser lain, satu-satunya pilihan Anda adalah memilih "Simpan sebagai" secara manual dari menu konteks tautan unduhan.document.getElementById('link').href = url;
, kode Anda dapat melanjutkan dan menyalakan tautan dengan menggunakan metode elemen.click()
.sumber
a.click
dengan menggunakan kodedocument.createEvent()
seperti yang disarankan Matěj Pokorný, ia bekerja pada FF tetapi tidak pada IE. Saya belum mencoba Chrome.Lihatlah Doug Neiner Unduhan yang merupakan antarmuka JavaScript berbasis Flash untuk melakukan ini.
sumber
HTML 5
spanduk dan tag yang sesuai? Itu mungkin akan menarik para pengguna yang tahu tentang bidang spesifik itu (saya kira masih sedikit, sekarang). Saya cukup yakin itu bisa dilakukan dalam HTML 5 tetapi saya tidak tahu caranya.Solusi Sederhana!
Bekerja di semua browser modern.
sumber
window.open()
. Itu tidak relevan. Anda bisa menggunakan metode ini dan memaksakannya.click()
, tetapi perhatikan waktunya karena Firefox tidak menyukainya jika Anda menelepon.click()
sebelum membiarkan elemen melampirkan ke tubuh.Anda dapat menghasilkan URI data . Namun, ada batasan khusus browser.
sumber
"data:text/plain;charset=UTF-8,"+encodeURIComponent(text)
Tapi ya, IE membatasi ukuran URL data ke jumlah yang tidak dapat digunakan dan tidak mendukungnya untuk hal-hal sepertiwindow.open(...)
atau iframe (saya pikir).Saya telah menggunakan FileSaver ( https://github.com/eligrey/FileSaver.js ) dan berfungsi dengan baik.
Sebagai contoh, saya melakukan fungsi ini untuk mengekspor log yang ditampilkan pada halaman.
Anda harus melewati array untuk instanciation the Blob, jadi saya mungkin tidak menulis ini dengan cara yang benar, tetapi itu bekerja untuk saya.
Untuk berjaga-jaga, berhati-hatilah dengan penggantian: ini adalah sintaks untuk menjadikan ini global, jika tidak maka hanya akan menggantikan yang pertama yang ia temui.
sumber
w.close();
setelahexecCommand
Saya menemukan dua pendekatan sederhana yang bekerja untuk saya. Pertama, menggunakan
a
elemen yang sudah diklik dan menyuntikkan data unduhan. Dan kedua, menghasilkana
elemen dengan data unduhan, menjalankana.click()
dan menghapusnya lagi. Tetapi pendekatan kedua hanya berfungsi jika diminta oleh tindakan klik pengguna juga. (Beberapa) Blok browserclick()
dari konteks lain seperti saat memuat atau dipicu setelah batas waktu (setTimeout).sumber
a
ke dalam dokumen (mungkin dengan"display:none"
), klik, lalu hapus.Berikut ini tautan ke data metode URI yang disarankan Mathew, ini bekerja pada safari, tetapi tidak baik karena saya tidak dapat mengatur jenis file, itu akan disimpan sebagai "tidak diketahui" dan kemudian saya harus pergi ke sana lagi nanti dan mengubahnya agar untuk melihat file ...
http://www.nihilogic.dk/labs/canvas2image/
sumber
Anda dapat menggunakan Penyimpanan lokal. Ini adalah setara dengan Html5 cookie. Tampaknya berfungsi di Chrome dan Firefox TETAPI di Firefox, saya perlu mengunggahnya ke server. Artinya, pengujian langsung di komputer di rumah saya tidak berfungsi.
Saya sedang mengerjakan contoh HTML5. Buka http://faculty.purchase.edu/jeanine.meyer/html5/html5explain.html dan gulir ke labirin. Informasi untuk membangun kembali labirin disimpan menggunakan localStorage.
Saya datang ke artikel ini mencari JavaScript HTML5 untuk memuat dan bekerja dengan file xml. Apakah sama dengan html dan JavaScript yang lebih lama ????
sumber
mencoba
Jika Anda ingin mengunduh data biner, lihat di sini
Memperbarui
2020.06.14 Saya memutakhirkan Chrome menjadi 83.0 dan di atas karya penghenti snippet SO (karena pembatasan keamanan kotak pasir ) - tetapi versi JSFiddle berfungsi - di sini
sumber
Seperti yang disebutkan sebelumnya File API, bersama dengan FileWriter dan FileSystem APIs dapat digunakan untuk menyimpan file di mesin klien dari konteks tab / jendela browser.
Namun, ada beberapa hal yang berkaitan dengan dua API terakhir yang harus Anda perhatikan:
Berikut adalah contoh sederhana tentang bagaimana API digunakan, secara langsung dan tidak langsung, bersamaan untuk melakukan ini:
BakedGoods *
Menggunakan File mentah, FileWriter, dan API FileSystem
Meskipun FileSystem dan FileWriter APIs tidak lagi sesuai standar, penggunaannya dapat dibenarkan dalam beberapa kasus, menurut saya, karena:
Apakah "beberapa kasus" mencakup kasus Anda, apakah Anda yang memutuskan.
* BakedGoods dikelola oleh orang lain di sini :)
sumber
Utas ini sangat berharga untuk mengetahui cara menghasilkan file biner dan meminta untuk mengunduh file yang disebutkan, semua dalam kode klien tanpa server.
Langkah pertama bagi saya adalah membuat gumpalan biner dari data yang saya simpan. Ada banyak sampel untuk melakukan ini untuk satu jenis biner, dalam kasus saya, saya memiliki format biner dengan beberapa jenis yang dapat Anda lewati sebagai array untuk membuat gumpalan.
Langkah selanjutnya adalah membuat browser meminta pengguna untuk mengunduh gumpalan ini dengan nama yang telah ditentukan.
Yang saya butuhkan hanyalah tautan bernama yang saya tambahkan di HTML5 yang bisa saya gunakan kembali untuk mengganti nama nama file awal. Saya menyembunyikannya karena tautannya tidak perlu ditampilkan.
Langkah terakhir adalah meminta pengguna mengunduh file.
sumber
Berikut ini adalah tutorial untuk mengekspor file sebagai ZIP:
Sebelum memulai, ada perpustakaan untuk menyimpan file, nama perpustakaan adalah fileSaver.js, Anda dapat menemukan perpustakaan ini di sini. Mari kita mulai, Sekarang, sertakan perpustakaan yang diperlukan:
Sekarang salin kode ini dan kode ini akan mengunduh file zip dengan file hello.txt yang memiliki konten Hello World. Jika semuanya berfungsi dengan baik, ini akan mengunduh file.
Ini akan mengunduh file bernama file.zip. Anda dapat membaca lebih lanjut di sini: http://www.wapgee.com/story/248/guide-to-create-zip-files-using-javascript-by-using-jszip-library
sumber