javascript - 无法使用 FileReader 读取拖放文件
问题描述
我正在尝试通过将图像拖放到页面上的特定 div 上,通过拖放将图像上传到我的网站:
<div class="container" (drop)="onDrop($event)" (dragover)="onDragOver($event)" (dragleave)="onDragLeave($event)">
<img id="blah" [src]="url || 'http://placehold.it/180'" alt="your image" />
</div>
我已经安装了所有与 drop 相关的事件,但是我无法真正从 FileReader 获取图像:
我究竟做错了什么?下面是我从控制器中删除相关功能以供参考。
onDrop(event) {
event.preventDefault();
event.stopPropagation();
this.file = event.dataTransfer.files[0];
const reader = new FileReader();
reader.onload = e => {
this.url = reader.result;
console.log(this.url);
};
reader.readAsDataURL(this.file);
this.fileDraggedOverDiv = false;
}
onDragOver(event) {
event.stopPropagation();
event.preventDefault();
this.fileDraggedOverDiv = true;
return false;
}
onDragLeave(event) {
event.stopPropagation();
event.preventDefault();
this.fileDraggedOverDiv = false;
return false;
}
解决方案
您实际上已成功将文件传递给onDrop
事件。只是在执行时您看不到它,因为继承的属性和不可枚举的属性被忽略了,正如本讨论console.log(JSON.stringify(event));
中所指出的那样。
要从事件中获取图像,您需要执行以下操作。
onDrop(event) {
event.preventDefault();
const file = event.dataTransfer.files[0];
}
有关完整的工作示例,请参阅此stackblitz。
推荐阅读
- google-cloud-platform - 谷歌文本到语音 - 休息后不读的词
- amazon-web-services - 是否可以仅在备用容量可用时才写入 DynamoDB?
- reactjs - 在子组件渲染之前反应 useEffectin App.js
- python - 使用函数内部的函数获取空数组
- .net - 在用于 gitlab 作业的 windows docker 映像中运行带有 selenium 的 chromedriver
- json - Facebook Webhook Messenger 获取页面 ID
- vim - 是否有一个自动命令事件可以在未修改的缓冲区上使用:x,但不是:q
- python - SqlAlchemy:仅使用经典映射读取列
- amazon-web-services - 如何根据表中的值在 AWS 中触发警报?
- python - 如何从另一个函数停止while true循环