用户可以通过两种方式启动文件传输:拖放到窗口小部件或使用多文件输入按钮。我喜欢如何使用多个文件输入,它将用智能“8个文件选择”或其他任何东西替换文件名字符串。
要实现此目的,必须填充输入。我没有实际从drop事件中创建xhr2对象,而只想将其fileList传递给input元素,并通过输入的“change”事件触发xhr2。
这是一些框架代码(jQuery用于事件绑定,但addListener应该工作相同):
domNode.defaultUI.on("drop", "#progOver", function(evt) {
evt.preventDefault();
evt.stopPropagation();
function sendFiles() {
var fileList = evt.originalEvent.dataTransfer.files;
document.getElementById('files-upload').files = fileList;
}
if (someCondition) {
sendFiles();
}
});
domNode.defaultUI.on("change", '#files-upload', function(evt) {
console.log(evt.target.files); // fileList object in Chrome, empty (prototype) fileLIst in Firefox
});
据我所知,fileList对象本身是只读的,我怀疑Chrome的设计是说“是的,那个文件列表没有被篡改过,让我们允许它”,Firefox的设计就是说“哇哇巴士”你是不是想用一些物品更新我可爱的安全文件输入?我不知道这个臭味物体来自哪里,拒绝!“
所以问题是两个:
我的上述假设是否正确?这就是为什么我不能使输入的“files”属性等于fileList?
是否有更新输入文件属性的替代方法(而不仅仅是尝试将值添加到属性中)?很高兴能够并行更新多个文件输入节点。