Saya membangun aplikasi web seret-dan-lepas-untuk-unggah menggunakan HTML5, dan saya meletakkan file ke div dan tentu saja mengambil objek dataTransfer, yang memberi saya FileList .
Sekarang saya ingin menghapus beberapa file, tetapi saya tidak tahu caranya, atau bahkan mungkin.
Lebih disukai saya hanya ingin menghapusnya dari FileList; Aku tidak berguna untuk mereka. Tetapi jika itu tidak memungkinkan, haruskah saya menulis cek dalam kode yang berinteraksi dengan FileList? Sepertinya itu tidak praktis.
javascript
html
drag-and-drop
filelist
Heilemann
sumber
sumber
Jawaban:
Jika Anda ingin menghapus hanya beberapa dari file yang dipilih: Anda tidak bisa. The Berkas API Kerja Draft Anda terhubung ke berisi catatan:
Membaca sedikit Konsep Kerja HTML 5, saya menemukan API elemen Umum
input
. Tampaknya Anda dapat menghapus seluruh daftar file dengan mengaturvalue
propertiinput
objek menjadi string kosong, seperti:BTW, artikel Menggunakan file dari aplikasi web mungkin juga menarik.
sumber
length
dibaca saja, saya pikir. Saya mencoba menghapus item dengan sambungan, gagal di Chrome.Pertanyaan ini telah ditandai terjawab, tetapi saya ingin membagikan beberapa informasi yang mungkin dapat membantu orang lain dalam menggunakan FileList.
Akan lebih mudah untuk memperlakukan FileList sebagai sebuah array, tetapi metode seperti sort, shift, pop, dan slice tidak berfungsi. Seperti yang disarankan orang lain, Anda dapat menyalin FileList ke array. Namun, daripada menggunakan loop, ada solusi satu baris sederhana untuk menangani konversi ini.
Diuji OK di FF, Chrome, dan IE10 +
sumber
Array.from(fileDialog.files)
lebih sederhanafileDialog.files = fileBuffer
?Jika Anda menargetkan browser evergreen (Chrome, Firefox, Edge, tetapi juga berfungsi di Safari 9+) atau Anda dapat membeli polyfill, Anda dapat mengubah FileList menjadi array dengan menggunakan
Array.from()
seperti ini:Maka mudah untuk menangani larik
File
seperti larik lainnya.sumber
fileArray
tidak menanganifileList
.Karena kita berada di ranah HTML5, inilah solusi saya. Intinya adalah Anda mendorong file ke Array alih-alih meninggalkannya di FileList, lalu menggunakan XHR2, Anda mendorong file ke objek FormData. Contoh di bawah ini.
sumber
Saya telah menemukan solusi yang sangat cepat & singkat untuk ini. Diuji di banyak browser populer (Chrome, Firefox, Safari);
Pertama, Anda harus mengonversi FileList menjadi Array
untuk menghapus elemen tertentu gunakan ini
sumber
event.target.files
yang tidak ditautkan ke masukan sehingga tidak dapat mengubah apa pun kecuali variabel lokal Anda ..Saya tahu ini adalah pertanyaan lama, tetapi peringkatnya tinggi di mesin telusur terkait dengan masalah ini.
properti di objek FileList tidak dapat dihapus tetapi setidaknya di Firefox, properti dapat diubah . Solusi saya untuk masalah ini adalah menambahkan properti
IsValid=true
ke file yang lolos pemeriksaan danIsValid=false
yang tidak.kemudian saya hanya mengulang daftar untuk memastikan bahwa hanya properti dengan
IsValid=true
yang ditambahkan ke FormData .sumber
Mungkin ada cara yang lebih elegan untuk melakukan ini, tetapi inilah solusi saya. Dengan Jquery
Pada dasarnya Anda membersihkan nilai input. Klon dan letakkan klon di tempat yang lama.
sumber
Ini bersifat sementara, tetapi saya memiliki masalah yang sama yang saya selesaikan dengan cara ini. Dalam kasus saya, saya mengunggah file melalui permintaan XMLHttp, jadi saya dapat memposting data kloning FileList melalui penambahan formdata. Fungsinya adalah Anda dapat menarik dan melepas atau memilih beberapa file sebanyak yang Anda inginkan (memilih file lagi tidak akan mereset FileList kloning), menghapus file apa pun yang Anda inginkan dari daftar file (kloning), dan mengirimkan melalui xmlhttprequest apa pun yang tertinggal disana. Inilah yang saya lakukan. Ini adalah posting pertama saya di sini jadi kodenya sedikit berantakan. Maaf. Ah, dan saya harus menggunakan jQuery daripada $ seperti yang ada di skrip Joomla.
Sekarang html dan gaya untuk ini. Saya cukup pemula tetapi semua ini benar-benar berhasil untuk saya dan membutuhkan waktu beberapa saat untuk mengetahuinya.
Gaya untuk itu. Saya harus menandai beberapa di antaranya! Penting untuk mengesampingkan perilaku Joomla.
Saya harap ini membantu.
sumber
Terima kasih @Nicholas Anderson sederhana dan lurus, berikut kode Anda diterapkan dan bekerja di kode saya menggunakan jquery.
HTML.
JS CODE
sumber
In vue js:
sumber
Jika Anda beruntung mengirim permintaan posting ke database dengan file dan Anda memiliki file yang ingin Anda kirim di DOM Anda
Anda cukup memeriksa apakah file dalam daftar file ada di DOM Anda, dan tentu saja jika tidak Anda tidak mengirim elemen itu ke de DB.
sumber
Anda mungkin ingin membuat sebuah array dan menggunakannya sebagai ganti dari daftar file read-only.
Setelah itu lakukan pengunggahan Anda terhadap daftar Anda, bukan daftar bawaan. Saya tidak yakin dengan konteks yang Anda kerjakan tetapi saya bekerja dengan plugin jquery yang saya temukan dan yang harus saya lakukan adalah mengambil sumber plugin dan meletakkannya di halaman menggunakan
<script>
tag. Kemudian di atas sumber saya menambahkan array saya sehingga dapat bertindak sebagai variabel global dan plugin dapat mereferensikannya.Maka itu hanya masalah menukar referensi.
Saya pikir ini akan memungkinkan Anda untuk juga menambahkan drag & drop seperti lagi, jika daftar bawaan hanya-baca lalu bagaimana lagi Anda bisa mendapatkan file yang dijatuhkan ke dalam daftar?
:))
sumber
FileList
objek kemyReadWriteList
variabel, jenisnya berubah dariArray
menjadiFileList
, jadi ini bukan solusi.Saya hanya mengubah jenis input ke teks dan kembali ke file: D
sumber