1
我正在使用node.js,express,mongoose。圖像在Node.js中拖放並上傳
我有一個表單,允許用戶要麼 1.點擊「上傳圖片」並上傳圖片 拖到從他們的計算機圖像到Dropbox的將圖片上傳
- 作品如預期。我遇到了問題2.基本上,我可以將圖像放入dropzone,但在提交表單時,圖像從未實際上傳。我讀了很多,但似乎無法找到解決方案。
我知道dropzone.js,但決定不使用它只是爲了學習如何自己做到這一點。
基本上當用戶點擊上載或拖動圖像到Dropbox的,它出現在預覽。這工作。
這裏是我的代碼的相關部分:
new.ejs
<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>
eventform.js
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')。文件,但顯然你不能這樣做的安全問題。基本上我繼續讀,我不能以編程方式添加文件。
任何指導,將不勝感激......
這就是我原來是這樣的,但它不能工作:( – Asool
檢查我的編輯。這不是你想要的嗎? – Mikey