Saat ini kami dapat menarik & melepas file ke wadah khusus dan mengunggahnya dengan XHR 2. Banyak sekaligus. Dengan bilah kemajuan langsung, dll. Hal-hal yang sangat keren. Contoh di sini.
Tetapi kadang-kadang kita tidak menginginkan kesejukan sebanyak itu. Apa yang saya ingin adalah untuk drag & drop file - banyak pada satu waktu - menjadi masukan file HTML standar : <input type=file multiple>
.
Apakah itu mungkin? Apakah ada cara untuk 'mengisi' input file dengan nama file yang benar (?) Dari drop file? (Berkas lengkap tidak tersedia karena alasan keamanan sistem file.)
Mengapa? Karena saya ingin mengirimkan formulir normal. Untuk semua browser dan semua perangkat. Seret & lepas hanyalah penyempurnaan progresif untuk menyempurnakan & menyederhanakan UX. Formulir standar dengan input file standar (+ multiple
atribut) akan ada di sana. Saya ingin menambahkan peningkatan HTML5.
sunting
Saya tahu di beberapa browser Anda kadang - kadang dapat (hampir selalu) memasukkan file ke dalam input file itu sendiri. Saya tahu Chrome biasanya melakukan ini, tetapi kadang-kadang gagal dan kemudian memuat file di halaman saat ini (gagal besar jika Anda mengisi formulir). Saya ingin menipu & tahan browser.
sumber
input type="file" multiple
berfungsi dengan baik di SafariJawaban:
Berikut ini berfungsi di Chrome dan FF, tetapi saya belum menemukan solusi yang mencakup IE10 + juga:
Anda mungkin ingin menggunakan
addEventListener
atau jQuery (dll.) Untuk mendaftarkan penangan evt Anda - ini hanya demi singkatnya.sumber
MSIE
,Trident/
(IE11) danEdge/
(IE12) ...fileInput.files = evt.dataTransfer.files;
. Safari dan Chrome keduanya berfungsi dengan baik.Saya membuat solusi untuk ini.
Tampilkan cuplikan kode
Fungsionalitas Drag and Drop untuk metode ini hanya berfungsi dengan Chrome, Firefox dan Safari (Tidak tahu apakah itu berfungsi dengan IE10), tetapi untuk browser lain, tombol "Atau klik di sini" berfungsi dengan baik.
Kolom input cukup ikuti mouse Anda ketika menyeret file ke suatu area, dan saya telah menambahkan tombol juga ..
Opacity komentar: 0; input file hanya terlihat sehingga Anda dapat melihat apa yang terjadi.
sumber
Ini adalah cara "DTHML" HTML5 untuk melakukannya. Input bentuk normal (yang IS hanya dibaca seperti yang ditunjukkan Ricardo Tomasi). Kemudian jika file diseret, itu dilampirkan ke formulir. Ini AKAN memerlukan modifikasi pada halaman tindakan untuk menerima file yang diunggah dengan cara ini.
Itu bahkan lebih bos jika Anda bisa membuat seluruh jendela zona jatuh, lihat Bagaimana cara mendeteksi acara seret HTML5 memasuki dan meninggalkan jendela, seperti yang dilakukan Gmail?
sumber
input type=file
.value
properti dengan file terbaru, setiap kali Anda beralih melalui loop kedepan?sumber
Secara teori, Anda bisa menambahkan elemen overlay
<input/>
, dan kemudian menggunakannyadrop
untuk menangkap file (menggunakan File API) dan meneruskannya ke inputfiles
array.Kecuali bahwa input file hanya baca . Ini masalah lama.
Namun Anda dapat, melewati kontrol formulir sepenuhnya dan mengunggah melalui XHR (tidak yakin tentang dukungan untuk itu):
Anda juga bisa menggunakan elemen di area sekitarnya untuk membatalkan acara drop di Chrome, dan mencegah perilaku default memuat file.
Menjatuhkan banyak file melalui input sudah berfungsi di Safari dan Firefox.
sumber
Inilah yang saya hasilkan.
Menggunakan Jquery dan Html. Ini akan menambahkannya ke file yang disisipkan.
sumber
Untuk solusi CSS saja:
Dimodifikasi dari https://codepen.io/Scribblerockerz/pen/qdWzJw
sumber
Saya tahu beberapa trik berhasil di Chrome:
Ketika menjatuhkan file ke zona drop Anda mendapatkan
dataTransfer.files
objek, yaituFileList
jenis objek, yang berisi semua file yang Anda seret. Sementara itu,<input type="file" />
elemen memiliki propertifiles
, yaituFileList
objek bertipe sama .Jadi, Anda cukup menetapkan
dataTransfer.files
objek keinput.files
properti.sumber
input.files
tidak bisa = (Bagi siapa saja yang ingin melakukan ini pada 2018, saya punya solusi yang jauh lebih baik dan lebih sederhana daripada semua hal lama yang diposting di sini. Anda dapat membuat kotak seret & jatuhkan yang terlihat bagus hanya dengan vanilla HTML, JavaScript, dan CSS.
(Hanya bekerja di Chrome sejauh ini)
Mari kita mulai dengan HTML.
Lalu kita akan sampai ke penataan.
Setelah Anda melakukan ini sudah terlihat baik-baik saja. Tapi saya membayangkan Anda ingin melihat file apa yang Anda unggah secara penuh, jadi kita akan melakukan JavaScript. Ingat rentang nilai pfp itu? Di situlah kami akan mencetak nama file.
Dan itu saja.
sumber
Kerja luar biasa oleh @BjarkeCK. Saya membuat beberapa modifikasi pada karyanya, untuk menggunakannya sebagai metode di jquery:
Biola yang Bekerja
sumber
Beberapa tahun kemudian, saya telah membangun perpustakaan ini untuk melakukan drop file ke elemen HTML apa pun.
Anda bisa menggunakannya seperti
sumber
Apa yang bisa Anda lakukan, adalah menampilkan input file dan menaruhnya dengan drop-area transparan Anda, berhati-hati untuk menggunakan nama seperti
file[1]
. {Pastikan untuk memiliki bagianenctype="multipart/form-data"
dalam tag FORMULIR Anda.}Kemudian minta drop-area menangani file tambahan dengan secara dinamis membuat lebih banyak input file untuk file 2..number_of_files, pastikan untuk menggunakan nama dasar yang sama, isi atribut nilai dengan tepat.
Terakhir (front-end) kirimkan formulir.
Semua yang diperlukan untuk menangani metode ini adalah mengubah prosedur Anda untuk menangani berbagai file.
sumber
multiple
atribut hari ini. Tidak perlu lebih dari 1 input file. Tapi bukan itu masalahnya. Bagaimana cara memasukkanFile
objek ke dalam input file? Saya pikir ini memerlukan beberapa contoh kode ...files
properti), tetapi saya belum berhasil di IE - apakah Anda beruntung?