Я создаю веб-приложение с перетаскиванием и загрузкой с использованием HTML5, и я перетаскиваю файлы в div и, конечно же, получаю объект dataTransfer, который дает мне FileList .
Теперь я хочу удалить некоторые файлы, но не знаю, как это сделать, и возможно ли это вообще.
Желательно просто удалить их из FileList; Мне они не нужны. Но если это невозможно, следует ли мне вместо этого писать чеки в коде, который взаимодействует с FileList? Это кажется громоздким.
javascript
html
drag-and-drop
filelist
Heilemann
источник
источник
Ответы:
Если вы хотите удалить только несколько выбранных файлов: вы не можете. API Файл рабочего проекта вы связаны с содержит примечание:
Немного прочитав рабочий проект HTML 5, я наткнулся на API общих
input
элементов . Похоже, вы можете удалить весь список файлов, установив дляvalue
свойстваinput
объекта пустую строку, например:Кстати, статья Использование файлов из веб-приложений также может быть интересна.
источник
length
Думаю, только для чтения. Я пытаюсь удалить элемент с помощью splice, в Chrome это не удается.На этот вопрос уже отмечен ответ, но я хотел бы поделиться некоторой информацией, которая может помочь другим в использовании FileList.
Было бы удобно рассматривать FileList как массив, но такие методы, как sort, shift, pop и slice, не работают. Как предлагали другие, вы можете скопировать FileList в массив. Однако вместо использования цикла есть простое однострочное решение для обработки этого преобразования.
Проверено нормально в FF, Chrome и IE10 +
источник
Array.from(fileDialog.files)
прощеfileDialog.files = fileBuffer
?Если вы ориентируетесь на вечнозеленые браузеры (Chrome, Firefox, Edge, но также работает в Safari 9+) или можете позволить себе полифил, вы можете превратить FileList в массив, используя
Array.from()
следующее:Тогда с массивом
File
s легко работать, как с любым другим массивом.источник
fileArray
не справитьсяfileList
.Поскольку мы находимся в сфере HTML5, это мое решение. Суть в том, что вы отправляете файлы в массив, а не оставляете их в списке файлов, а затем, используя XHR2, отправляете файлы в объект FormData. Пример ниже.
источник
Я нашел очень быстрое и короткое решение для этого. Протестировано во многих популярных браузерах (Chrome, Firefox, Safari);
Во-первых, вам нужно преобразовать FileList в массив
чтобы удалить конкретный элемент, используйте это
источник
event.target.files
которая не связана с вводом, поэтому она не может ничего изменить, кроме вашей локальной переменной ..Я знаю, что это старый вопрос, но он занимает высокие позиции в поисковых системах по этому поводу.
свойства в объекте FileList нельзя удалить, но, по крайней мере, в Firefox их можно изменить . Мое решение этой проблемы состояло в том, чтобы добавить свойство
IsValid=true
к тем файлам, которые прошли проверку, иIsValid=false
к тем, которые не прошли .затем я просто просматриваю список, чтобы убедиться, что
IsValid=true
в FormData добавлены только свойства с .источник
Возможно, есть более элегантный способ сделать это, но вот мое решение. С помощью JQuery
В основном вы очищаете значение ввода. Клонируйте его и поместите клон вместо старого.
источник
Это ненадолго, но у меня была та же проблема, которую я решил таким образом. В моем случае я загружал файлы через запрос XMLHttp, поэтому я смог опубликовать клонированные данные FileList с помощью добавления formdata. Функциональность заключается в том, что вы можете перетаскивать или выбирать несколько файлов столько раз, сколько хотите (повторный выбор файлов не приведет к сбросу клонированного списка файлов), удалить любой файл, который вы хотите, из (клонированного) списка файлов и отправить через xmlhttprequest все, что было оставил там. Вот что я сделал. Это мой первый пост, поэтому код немного запутан. Сожалею. А, и мне пришлось использовать jQuery вместо $, как это было в скрипте Joomla.
Теперь о HTML и стилях для этого. Я новичок, но все это на самом деле сработало для меня, и мне потребовалось время, чтобы понять это.
Стили для этого. Мне пришлось отметить некоторые из них! Важные, чтобы переопределить поведение Joomla.
Надеюсь, это поможет.
источник
Спасибо @Nicholas Anderson, просто и прямо, вот ваш код, примененный и работающий над моим кодом с использованием jquery.
HTML.
КОД JS
источник
В vue js:
источник
Если вам посчастливилось отправить почтовый запрос в базу данных с файлами, и у вас есть файлы, которые вы хотите отправить, в вашей DOM
вы можете просто проверить, присутствует ли файл в списке файлов в вашей DOM, и, конечно, если это не так, вы просто не отправляете этот элемент в de DB.
источник
Вы можете создать массив и использовать его вместо списка файлов, доступного только для чтения.
После этого выполняйте загрузку по вашему списку, а не по встроенному списку. Я не уверен в контексте, в котором вы работаете, но я работаю с плагином jquery, который я нашел, и мне нужно было взять исходный код плагина и поместить его на страницу с помощью
<script>
тегов. Затем над источником я добавил свой массив, чтобы он мог действовать как глобальная переменная, и плагин мог ссылаться на него.Тогда оставалось просто поменять ссылки.
Я думаю, это позволит вам также добавить перетаскивание, как и снова, если встроенный список доступен только для чтения, то как еще вы могли бы добавить перетаскиваемые файлы в список?
:))
источник
FileList
объектmyReadWriteList
переменной, он меняет свой тип сArray
наFileList
, так что это не решение.Я просто меняю тип ввода на текст и обратно в файл: D
источник