Javascript 手动触发';改变';带有效负载的输入上的事件

Javascript 手动触发';改变';带有效负载的输入上的事件,javascript,file-upload,dom-events,Javascript,File Upload,Dom Events,我正在为输入元素实现拖放文件上载,但在处理拖放事件时遇到了一些困难。我有以下html: <label for="input" id="label" ondrop="handleDrop(event)"> <input id="input" type="file" name="file"/> <span>Choose a file or drag it here.</span> </label> 当我单击输入并浏览文件时

我正在为输入元素实现拖放文件上载,但在处理拖放事件时遇到了一些困难。我有以下html:

<label for="input" id="label" ondrop="handleDrop(event)">
    <input id="input" type="file" name="file"/>
    <span>Choose a file or drag it here.</span>
</label>
当我单击输入并浏览文件时,将触发“更改”事件,文本将设置为上载的文件,“文件”属性将设置为该文件。我希望当一个文件被放到标签上时也会发生同样的情况,但我不知道如何做到这一点。我可以使用
input.dispatchEvent(新事件('change'))
,但这不会传递放入输入文件属性的文件

也许我把这个问题想错了,有更好的替代方法,但最终的目标当然是在我单击submit按钮时将文件发送到我的服务器。(我通过使用
@RequestParam(“file”)Multipartfile文件捕获文件的方式使用SpringMVC)


非常感谢您的帮助:)

显然,由于出于安全原因,
input type=“file”
的file属性是只读的,因此我尝试做的是不可能的。正确的方法可能是直接将文件发送到MVC

let label = document.getElementById('label');
let input = document.getElementById('input');
label.addEventListener('drop', handleDrop);
input.addEventListener('change', handleChange);

function handleDrop(e) {
    e.preventDefault();
    let file = e.dataTransfer.files;
    console.log(file);
    //and now?
}

function handleChange(e) {
    //default not overwritten
    let fileName = e.target.value.split('\\').pop();
    if (fileName) {
        input.nextElementSibling.innerHTML = fileName;
    }
}