Добавление файлов в input file перетаскиванием НЕ из файловой системы

У меня есть input file, хотелось бы, чтоб можно было перетаскивать туда изображения не из файловой системы (это работает отлично), а из других источников (например WAWeb). Сейчас при попытке перетащить файл он открывается в новой вкладке по ссылке такого вида "blob:https://web.whatsapp.com/{GUID}" Подскажите, как можно реализовать такую возможность? Предпочтительно использование JS, jQuery


Ответы (1 шт):

Автор решения: Vladimir

Решение примерно такое:

<input type="file"
  id="drop_zone"
  ondrop="dropHandler(event);"
  ondragover="dragOverHandler(event);">
>

<script>
function dropHandler(ev) {
  console.log("File(s) dropped");

  // Prevent default behavior (Prevent file from being opened)
  ev.preventDefault();

  
    // Use DataTransfer interface to access the file(s)
    [...ev.dataTransfer.files].forEach((file, i) => {
      console.log(`… file[${i}].name = ${file.name}`);
    });
}

function dragOverHandler(ev) {
  console.log("File(s) in drop zone");

  // Prevent default behavior (Prevent file from being opened)
  ev.preventDefault();
}
</script>

Проблема была в том, что, если в перетаскиваемом объекте ни только FileList, то стандартное поведение при ondragover (попадание объекта в область для перетаскивания) и (объект отпущен/брошен в области для перетаскивания) для input type="file" - открыть этот объект в новой вкладке. WhatsApp Web (скорее всего и многие другие ресурсы) при перетаскивании картинки как раз передаёт dataTransfer, который содержит помимо файлов и другие item, поэтому обязательно нужно отменять стандартное поведение.

→ Ссылка