Зачем вставлять событие getAsFile, возвращающее ноль для файла без изображения? - PullRequest
0 голосов
/ 08 марта 2020

Ниже приведен фрагмент демонстрации для обработки события вставки документа, отображения информации о вставленном элементе

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
</head>
<body>
<h3>Paste file</h3>
<div id="out">

</div>
<script>
  var $log = window.out;

  function log(s) {
    $log.innerHTML += `<div>${s}</div>`
  }

  document.addEventListener('paste', function (e) {
    const data = (e.originalEvent || e).clipboardData;
    log(`Text ${data.getData('text')}`);
    Array.from(data.items)
      .forEach((item, i) => {
        let file = item.getAsFile() || {};
        console.log(item.getAsFile())
        log(`Item[${i}] type=${item.type} kind=${item.kind} getAsFile=${item.getAsFile()} file.name=${file.name} file.type=${file.type} file.size=${file.size}`);
      })
  })
</script>
</body>
</html>

Но можно получить только файл изображения, а тип файла неправильный, всегда возвращайте image/png даже когда я вставляю файл jpg.

Когда я вставляю некоторые файлы другие типы файлов, такие как hello.txt, getAsFile вернут null, как я могу обработать другой тип файла вставки?

Мой журнал похож на этот под macos chrome 79.0.3945.130

Text back.jpg
Item[0] type=text/plain kind=string getAsFile=null file.name=undefined file.type=undefined file.size=undefined
Item[1] type=image/png kind=file getAsFile=[object File] file.name=image.png file.type=image/png file.size=6232743

Text hello.txt
Item[0] type=text/plain kind=string getAsFile=null file.name=undefined file.type=undefined file.size=undefined
Item[1] type=image/png kind=file getAsFile=null file.name=undefined file.type=undefined file.size=undefined
...