Javascript 数据传输项';s getAsFile方法为文件返回null
我正在实现一个简单的拖放文件输入。我想在文件(图像)被“悬停”在放置区域时预览它们。但是,对于文件,Javascript 数据传输项';s getAsFile方法为文件返回null,javascript,Javascript,我正在实现一个简单的拖放文件输入。我想在文件(图像)被“悬停”在放置区域时预览它们。但是,对于文件,getAsFile方法不断返回null。这是我的密码: dropzone.addEventListener("dragenter", event => { event.preventDefault(); // make sure these are actually images if(!isImages(event)){ return; }
getAsFile
方法不断返回null
。这是我的密码:
dropzone.addEventListener("dragenter", event => {
event.preventDefault();
// make sure these are actually images
if(!isImages(event)){
return;
}
// preparing the preview area
let target = dropzone_overlay_images;
target.innerHTML = '';
for(let i = 0; i < event.dataTransfer.items.length; i++){
// assign current item to a variable to make working with it easier
let item = event.dataTransfer.items[i];
let img = document.createElement('img');
// for debug: logging the current item
console.log(item);
// get it as file
let file = item.getAsFile();
// and log the file
console.log(file);
}
dropzone_overlay.classList.toggle('show');
});
我是做错了什么还是这是一个错误?在Chrome 55上测试。aa我找到了答案
dragenter
事件无权访问实际文件。它可以检测哪些文件正在被拖动,但无法访问它们的内容。这就是为什么即使填充了DataTransfer.items
对象,也没有填充DataTransfer.files
对象,并且getAsItem
方法不能用于DataTransfer.items
项
因此,我想做的(预览拖动的文件)根本不可能。这里应该添加:根据dragenter事件上的[(6.8.2拖动数据存储区),
拖动数据存储区模式处于保护模式
。根据[(6.8.3.2 DataTransferItem接口)getAsFile()当拖动数据存储模式
不处于读/写模式
或只读模式
时,必须返回null。下面是一个包含所有拖放事件和相关模式的表:(在这种情况下没有多大帮助,但很高兴知道,imo)
main.js:52 DataTransferItem {kind: "file", type: "image/png"}
main.js:60 null