Saya tidak yakin apakah ini mungkin menggunakan teknologi web standar.
Saya ingin pengguna dapat mengunduh banyak file dalam satu tindakan. Yaitu klik kotak centang di sebelah file, dan kemudian dapatkan semua file yang diperiksa.
Apakah mungkin - jika demikian strategi dasar apa yang Anda rekomendasikan. Saya tahu saya dapat menggunakan teknologi komet untuk membuat peristiwa sisi server yang memicu HttpResponse tetapi saya berharap ada cara yang lebih sederhana.
http
web-applications
download
Ankur
sumber
sumber
sumber
link.setAttribute('download', null);
mengganti nama semua file saya menjadi null.link.setAttribute('download',filename)
dalam lingkaran. Ini memungkinkan Anda memberi nama file apa pun yang Anda inginkan. Juga, saya yakin itu harus nama file saja tidak termasuk URL. Saya akhirnya mengirim dua array: satu dengan URL lengkap dan satu lagi hanya dengan nama file.Minecraft.jar
.Anda dapat membuat satu set iframe tersembunyi untuk sementara, memulai unduhan dengan GET atau POST di dalamnya, tunggu unduhan dimulai dan hapus iframe:
Atau, tanpa jQuery:
sumber
setTimeout()
?Solusi ini berfungsi di semua browser, dan tidak memicu peringatan. Daripada membuat
iframe
, di sini kami membuat tautan untuk setiap file. Ini mencegah pesan peringatan muncul.Untuk menangani bagian perulangan, kami menggunakan
setTimeout
, yang diperlukan agar dapat berfungsi di IE.sumber
Google Chrome Version 76.0.3809.100 (Official Build) (64-bit)
.Cara termudah adalah dengan menyajikan beberapa file yang dibundel ke dalam file ZIP.
Saya kira Anda dapat memulai beberapa unduhan file menggunakan banyak iframe atau popup, tetapi dari sudut pandang kegunaan, file ZIP masih lebih baik. Siapa yang ingin mengklik sepuluh dialog "Simpan Sebagai" yang akan ditampilkan browser?
sumber
Saya setuju bahwa file zip adalah solusi yang lebih rapi ... Tetapi jika Anda harus mendorong banyak file, inilah solusi yang saya buat. Ia bekerja di IE 9 dan lebih tinggi (mungkin versi yang lebih rendah juga - saya belum mengujinya), Firefox, Safari dan Chrome. Chrome akan menampilkan pesan kepada pengguna untuk mendapatkan persetujuannya untuk mengunduh banyak file saat pertama kali situs Anda menggunakannya.
Satu-satunya efek samping dari teknik ini, adalah pengguna akan melihat penundaan antara pengiriman dan dialog unduhan ditampilkan. Untuk meminimalkan efek ini, saya sarankan Anda menggunakan teknik yang dijelaskan di sini dan pada pertanyaan ini Deteksi ketika browser menerima unduhan file yang terdiri dari pengaturan cookie dengan file Anda untuk mengetahui bahwa itu telah mulai mengunduh. Anda harus memeriksa cookie ini di sisi klien dan mengirimkannya ke sisi server. Jangan lupa untuk mengatur jalur yang tepat untuk cookie Anda atau Anda mungkin tidak melihatnya. Anda juga harus menyesuaikan solusi untuk unduhan banyak file.
sumber
Versi jQuery dari iframe menjawab:
sumber
download(['http://nogin.info/cv.doc','http://nogin.info/cv.doc']);
Namun, ini tidak berfungsi untuk mengunduh file gambar.Solusi sudut:
contoh yang berfungsi: https://plnkr.co/edit/XynXRS7c742JPfCA3IpE?p=preview
sumber
Untuk memperbaiki jawaban @Dmitry Nogin: ini berhasil dalam kasus saya.
Namun, ini belum diuji, karena saya tidak yakin bagaimana dialog file bekerja pada berbagai kombinasi OS / browser. (Jadi wiki komunitas.)
sumber
Ini berfungsi di semua browser (IE11, firefox, Edge, Chrome, dan Chrome Mobile) Dokumen saya ada di beberapa elemen terpilih. Peramban tampaknya mengalami masalah saat Anda mencoba melakukannya terlalu cepat ... Jadi saya menggunakan waktu tunggu.
Ini adalah solusi yang menggunakan janji:
sumber
Sejauh ini solusi termudah (setidaknya di ubuntu / linux):
Bekerja seperti pesona.
sumber
Untuk mengatasi ini, saya membuat perpustakaan JS untuk mengalirkan banyak file langsung ke zip di sisi klien. Fitur unik utama adalah tidak ada batasan ukuran dari memori (semuanya di-streaming) atau format zip (menggunakan zip64 jika isinya lebih dari 4GB).
Karena tidak melakukan kompresi, ia juga sangat berkinerja.
Temukan "downzip" di npm atau github !
sumber
Skrip berikut melakukan pekerjaan ini dengan baik.
sumber
Saya mencari solusi untuk melakukan ini, tetapi membuka ritsleting file di javascript tidak sebersih yang saya suka. Saya memutuskan untuk merangkum file ke dalam satu file SVG.
Jika Anda memiliki file yang disimpan di server (saya tidak), Anda cukup mengatur href di SVG.
Dalam kasus saya, saya akan mengonversi file ke base64 dan menyematkannya di SVG.
Sunting: SVG bekerja dengan sangat baik. Jika Anda hanya akan mengunduh file, ZIP mungkin lebih baik. Jika Anda ingin menampilkan file, maka SVG tampaknya lebih unggul.
sumber
Saat menggunakan komponen Ajax, dimungkinkan untuk memulai banyak unduhan. Oleh karena itu, Anda harus menggunakan https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow
Tambahkan contoh AJAXDownload ke Halaman Anda atau apa pun. Buat AjaxButton dan timpa onSubmit. Buat AbstractAjaxTimerBehavior dan mulai mengunduh.
Selamat mengunduh!
sumber
Di bawah kode 100% berfungsi.
Langkah 1 : Tempel kode di bawah ini ke file index.html
Langkah 2 : Tempel kode di bawah ini di file index.js
CATATAN : Pastikan ketiga file yang akan didownload akan ditempatkan di folder yang sama bersama dengan file angularProject / index.html atau angularProject / index.js .
sumber
Dapatkan daftar url dengan panggilan ajax dan kemudian gunakan plugin jquery untuk mengunduh beberapa file paralel.
sumber
Inilah cara saya melakukannya. Saya membuka beberapa ZIP tetapi juga jenis data lain (saya mengekspor projet dalam PDF dan pada saat yang sama banyak ZIP dengan dokumen).
Saya baru saja menyalin bagian dari kode saya. Panggilan dari tombol dalam daftar:
Jadi panggilan dasar untuk rutinitas JS (aturan Vanilla!). inilah rutinitas JS:
Triknya adalah TIDAK memberikan tautan langsung dari file ZIP tetapi mengirimkannya ke browser. Seperti ini:
sumber
sumber