在express.js应用程序中,我有一个包含一些字段的表单,其中一个是上载图像字段。
当用户浏览其图像文件并选择一个时,我想在提交表单之前在“预览块”中显示此文件。
我想到了这些动作:
/tmp
目录中我正在寻找实现此过程的最佳方法。
解决此问题的步骤。
使用输入类型文件的HTML文件。
<input id="upload_images" type="file" multiple="multiple">
将事件侦听器添加到输入类型文件的change事件。
if(document.addEventListener) {
document.getElementById("upload_images").addEventListener("change", function(e){
uploadImages(e);
});
}
else {
document.getElementById("upload_images").attachEvent("onchange", function(e){
uploadImages(e);
});
}
当用户选择文件时,创建一个表单数据,并使用ajax将其发送到服务器(Mutipart数据)。
function uploadImages(e) {
var uploadedFiles = e.target.files;
var xhrObj = new XMLHttpRequest();
xhrObj.open('POST', "<<your node>>/<<request URI>>", true);
xhrObj.onreadystatechange = function () {
if(this.readyState == this.DONE) {
if(this.status != 200) {
// Show Error
}
else {
var returnedResponse = xhrObj.responseText;
if(returnedResponse == 'success') { // check your returned data like I was returning "success"
// Success - Do the tasks
}
}
}
};
var requestFormData = new FormData();
for(var i=0; i<uploadedFiles.length; i++) {
requestFormData.append('data', uploadedFiles[i]);
}
xhrObj.send(requestFormData);
}
在服务器(nodejs)上,使用强大的功能来接收上载的文件并将其存储在所需的任何位置。
// require formidable
// require imagemagick
function processUploadImages(req, res) {
var form = new formidable.IncomingForm();
form.uploadDir = __dirname+'/uploaded_images/;
form.maxFieldsSize = 20 * 1024 * 1024;
form.keepExtensions = true;
form.onPart = function(part) {
form.handlePart(part);
}
form.on('file', function(name, file) {
// Handle file data like:
// file.path
// file.name
});
form.on('end', function() {
//show complete
});
form.parse(req, function(error, fields, files) {
// create thumbnail images
// return response
});
}
在server(nodejs)上,使用imagemagick创建缩略图,并将其存储在可以放置在任何地方的文件夹中。
将已保存的(图像和缩略图)链接发送回响应中。
创建一个图像标签,并在src标签中使用这些链接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句