将文件拖放到或粘贴到文本区域

Drop or Paste file on the Textarea

我想做这样的消息输入。

但是我有一个问题如何获取文件数据,我拖放或Ctrl+V 到textarea 上传。 为此,我正在使用 Riot.js 和 Symfony。

这是我未完成的代码:

<form method="post" enctype="multipart/form-data" onsubmit="{ handleFileSubmit }">
   <textarea class="form-control" id="message" onpaste="{ handleFilePaste }" required> 
   </textarea>
</form>

handleFilePaste(e) {
  e.preventDefault();
  console.log(e.clipboardData.items);
  console.log(window.navigator.clipboard);
}

但是当我在本地驱动器上复制文件并将其粘贴到文本区域时,上面的 console.log() 没有得到任何文件数据。 如果有人知道怎么做或者有好的示例link,请与我分享。

如果可以,请分享拖放示例(重要:输入字段必须是textarea)。

希望得到好评。 谢谢。

当我过去不得不做类似的事情时,我没有将事件监听器附加到表单本身,而是附加到 document,如下例所示(您可以执行并粘贴一些东西,它有效),从技术上讲,我不确定它在文本区域上是否同样有效,但它确实适用于文档,你在哪里收听粘贴事件并不重要,因为当你检测到正在粘贴的文件时,你将决定你要做什么.

function handleFilePaste(e) {

  const items = (e.clipboardData || e.originalEvent.clipboardData).items;
  console.log(items);
  
  for (let index in items) {
    const item = items[index];
    if ( item.kind === 'file' ) {
      return item.getAsFile();
    }
  }
}

document.addEventListener('DOMContentLoaded', () => {
  document.onpaste = function(e){
    const file = handleFilePaste(e);
    console.log(file);
    
    if ( !file ) { return; }
  }
});
<form method="post" enctype="multipart/form-data" onsubmit="{ handleFileSubmit }">
   <textarea class="form-control" id="message" placeholder="Paste something" required></textarea>
</form>