Javascript 在Node.js中拖放和上载图像
我正在使用node.js、express和mongoose 我有一个表单,允许用户 1.单击“上载图像”并上载图像 2.将图像从其计算机拖动到dropbox以上载图像Javascript 在Node.js中拖放和上载图像,javascript,jquery,node.js,drag-and-drop,image-uploading,Javascript,Jquery,Node.js,Drag And Drop,Image Uploading,我正在使用node.js、express和mongoose 我有一个表单,允许用户 1.单击“上载图像”并上载图像 2.将图像从其计算机拖动到dropbox以上载图像 一切正常。我跟2号有麻烦。基本上,我可以将图像放入dropzone,但是当表单提交时,图像从未实际上传。我读了很多书,但似乎找不到解决办法 我知道dropzone.js,但决定不使用它,只是为了自己学习如何做 这就是我的dropbox的外观(只是为了让您理解代码): 基本上,当用户单击“上载”或将图像拖动到dropbox中时,图
<input name="image" type="file" id="image" accept="image/*" style="display:none" onchange="handleFiles(this.files)">
<div id="imageBorder" >
<div id="imageContainer">
<div id="dropbox">
<i class="fa fa-picture-o" aria-hidden="true"></i>
<p> Drop image here or click to upload</p>
</div>
<div id="preview" class="hidden">
</div>
<button id="fileSelect" class="btn btn-primary btn-block">Upload Image</button>
<button id="fileRemove" class="btn btn-primary btn-block">Remove Image</button>
</div>
function eventImageSetup() {
var dropbox = document.getElementById("dropbox"),
fileElem = document.getElementById("image"),
fileSelect = document.getElementById("fileSelect"),
fileRemove = document.getElementById("fileRemove");
$(dropbox).height($('#imageBorder').height());
fileSelect.addEventListener("click", function(e) {
if (fileElem) {
fileElem.click();
e.preventDefault(); // to prevent submit
}
}, false);
fileRemove.addEventListener("click", function(e) {
e.preventDefault(); // prevent submit
if(!$('#preview').hasClass('hidden')) { // If there is an image uploaded
$('#preview').empty();
$('#dropbox').removeClass('hidden');
$('#preview').addClass('hidden');
$('#fileSelect').text('Upload Image');
resetFileInputField();
}
removeError($('#imageError'), $('#image'));
});
dropbox.addEventListener("dragenter", dragenter, false);
dropbox.addEventListener("dragover", dragover, false);
dropbox.addEventListener("drop", drop, false);
} // end of eventImageSetup
function dragenter(e) {
e.stopPropagation();
e.preventDefault();
}
function dragover(e) {
e.stopPropagation();
e.preventDefault();
}
function drop(e) {
e.stopPropagation();
e.preventDefault();
var dt = e.dataTransfer;
var files = dt.files;
handleFiles(files);
}
function handleFiles(files) {
var file = files[0];
console.log("This is the file: ", file);
var imageType = /^image\//;
if (!imageType.test(file.type)) {
// a bunch of code to deal with this...
return;
} else if (file.size > MAX_FILE_SIZE) {
// a bunch of code to deal with this..
return;
} else {
var img = document.createElement("img");
img.onload = function() {
adjustImageSize(img);
};
$('#dropbox').addClass('hidden');
$('#preview').removeClass('hidden');
$('#preview').empty();
$('#preview').append(img);
$('#fileSelect').text('Replace Image');
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(event) {
img.src = event.target.result;
}
}
}
如您所见,问题在于拖放时,我从未将文件实际附加到表单元素。我尝试将该文件附加到$(“#image”).files,但显然,由于安全问题,您不能这样做。基本上,我一直在阅读无法以编程方式添加文件的内容
如果我没有弄错的话,请提供任何指导。如果您阅读该文件,您必须附加
onload
var reader = new FileReader();
reader.onload = function(event) {
img.src = event.target.result;
}
reader.readAsDataURL(file);
示例
var MAX\u FILE\u SIZE=Infinity;//忽略这一点
函数eventImageSetup(){
$(dropbox).height($('#imageBorder').height());
fileSelect.addEventListener(“单击”,函数(){
image.click();
},假);
fileRemove.addEventListener(“单击”,函数(){
if(!$('#preview').hasClass('hidden'){//如果上传了图像
$(“#预览”).empty();
$(“#dropbox”).removeClass('hidden');
$('预览').addClass('隐藏');
$('#fileSelect').text('Upload Image');
resetFileInputField();
}
删除错误($('imageError'),$('imageError');
},假);
dropbox.addEventListener(“dragenter”,dragenter,false);
dropbox.addEventListener(“dragover”,dragover,false);
dropbox.addEventListener(“drop”,drop,false);
}//eventImageSetup结束
功能性疏水剂(e){
e、 停止传播();
e、 预防默认值();
}
函数dragover(e){
e、 停止传播();
e、 预防默认值();
}
功能下降(e){
e、 停止传播();
e、 预防默认值();
var dt=数据传输;
var files=dt.files;
手文件(档案);
}
函数句柄文件(文件){
var file=files[0];
//log(“这是文件:”,文件);
var imageType=/^image\/;
如果(!imageType.test(file.type)){
//一堆代码来处理这个。。。
返回;
}
如果(file.size>最大文件大小){
//一堆代码来处理这个。。
返回;
}
var img=document.createElement(“img”);
img.onload=函数(){
//调整图像大小(img);
};
$('#dropbox').addClass('hidden');
$(“#预览”).removeClass('hidden');
$(“#预览”).empty();
$('预览').append(img);
$('#fileSelect').text('Replace Image');
var reader=new FileReader();
reader.onload=函数(e){
img.src=e.target.result;
}
reader.readAsDataURL(文件);
}
eventImageSetup()代码>
#dropbox{
边框:2个虚线;
高度:100px;
宽度:230px;
}
将图像拖放到此处或单击上载
上传图像
删除图像
如果我没弄错的话,您必须在读取文件时附加onload
事件
var reader = new FileReader();
reader.onload = function(event) {
img.src = event.target.result;
}
reader.readAsDataURL(file);
示例
var MAX\u FILE\u SIZE=Infinity;//忽略这一点
函数eventImageSetup(){
$(dropbox).height($('#imageBorder').height());
fileSelect.addEventListener(“单击”,函数(){
image.click();
},假);
fileRemove.addEventListener(“单击”,函数(){
if(!$('#preview').hasClass('hidden'){//如果上传了图像
$(“#预览”).empty();
$(“#dropbox”).removeClass('hidden');
$('预览').addClass('隐藏');
$('#fileSelect').text('Upload Image');
resetFileInputField();
}
删除错误($('imageError'),$('imageError');
},假);
dropbox.addEventListener(“dragenter”,dragenter,false);
dropbox.addEventListener(“dragover”,dragover,false);
dropbox.addEventListener(“drop”,drop,false);
}//eventImageSetup结束
功能性疏水剂(e){
e、 停止传播();
e、 预防默认值();
}
函数dragover(e){
e、 停止传播();
e、 预防默认值();
}
功能下降(e){
e、 停止传播();
e、 预防默认值();
var dt=数据传输;
var files=dt.files;
手文件(档案);
}
函数句柄文件(文件){
var file=files[0];
//log(“这是文件:”,文件);
var imageType=/^image\/;
如果(!imageType.test(file.type)){
//一堆代码来处理这个。。。
返回;
}
如果(file.size>最大文件大小){
//一堆代码来处理这个。。
返回;
}
var img=document.createElement(“img”);
img.onload=函数(){
//调整图像大小(img);
};
$('#dropbox').addClass('hidden');
$(“#预览”).removeClass('hidden');
$(“#预览”).empty();
$('预览').append(img);
$('#fileSelect').text('Replace Image');
var reader=new FileReader();
reader.onload=函数(e){
img.src=e.target.result;
}
reader.readAsDataURL(文件);
}
eventImageSetup()代码>
#dropbox{
边框:2个虚线;
高度:100px;
宽度:230px;
}
将图像拖放到此处或单击上载
上传图像
删除图像
这就是我最初使用它的方式,但不幸的是它没有工作:(这就是我最初使用它的方式,但不幸的是它没有工作:(