我正在开发一个允许用户上传图像的应用程序(在 Node.js 中,与这种情况无关)。使用带有输入 (type="file") 字段的表单可以正常工作。
但是,我想要的是能够使用 HTML5 拖放来上传图像。据我所知,可以将图像拖动到客户端,并且图像缩略图显示在 div 中。但是,我确实需要一些帮助才能使文件上传正常工作。
问题是我想使用我现在正在使用的表单,并且(以某种方式)将文件的路径传递给输入字段,即流程将完全像现在一样工作,而不是通过浏览来选择文件我想通过拖放将其附加到输入字段。
在下面用于拖放的 js 代码中,拖放到客户端的文件存储在变量“file”中,我可以使用“file.name”、“file.type”和“file.size”与以前使用表单的方式完全相同。但是,我无法访问文件“路径”(file.path),这使得无法访问文件服务器端进行上传,就像我以前那样。
问题是,是否可以在将文件拖到客户端后将文件对象传递给输入字段,以便我可以单击“提交”并上传文件?如果是这样,如何做到这一点?
提前致谢!
保管箱以及我用于文件上传的表单:
<div id='upload'>
<article>
<div id='holder'>
<p id='status'>File API and FileReader API not supported</p>
</div>
</article>
<form method='post' enctype='multipart/form-data' action='/file-upload'>
<p>
<input type='file' name='thumbnail'>
</p>
<p>
<input type='submit'>
</p>
</form>
</div>
拖放代码:
uploadImage: function(){
var holder = document.getElementById('holder'),
state = document.getElementById('status');
if (typeof window.FileReader === 'undefined') {
state.className = 'fail';
} else {
state.className = 'success';
state.innerHTML = 'File API & FileReader available';
}
holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
this.className = '';
e.preventDefault();
var file = e.dataTransfer.files[0],
reader = new FileReader();
reader.onload = function (event) {
holder.style.background = 'url(' + event.target.result + ') no-repeat center';
};
reader.readAsDataURL(file);
return false;
};
},