详解nodejs实现本地上传图片并预览功能(express4.0+)
程序员文章站
2023-10-31 18:37:40
express为:4.13.1 multyparty: 4.1.2
代码主要实现本地图片上传到nodejs服务器的文件下,通过取图片路径进行图片预览
写在前...
express为:4.13.1 multyparty: 4.1.2
代码主要实现本地图片上传到nodejs服务器的文件下,通过取图片路径进行图片预览
写在前面:计划实现图片上传预览功能,但是本地图片上传所获得路径为 c:\fakepath\"+文件名的形式,得不到文件真实路径,所以无法直接预览,于是采用将图片上传至服务器,传回服务器路径,实现预览。前端采用通过ajax方式上传文件,使用formdata进行ajax请求 ,nodejs端采用multiparty模块
相关查看文档:
通过ajax方式上传文件,使用formdata进行ajax请求
部分代码:
<form name='picform' action = "javascript:;"method="post" encype = "multipart/form-data" > <input type="file" id="test" id="j_imgfile"> </form> <div> <img src="" id="j_imgpic"> </div>
js中采用change事件,即当选完图片时就发送ajax请求
$('#j_imgfile').on('change',function(){ // 判断上传文件类型 var objfile = $('#j_imgfile').val(); var objtype = objfile.substring(objfile.lastindexof(".")).tolowercase(); var formdata = new formdata(document.forms.nameditem("picform")); console.log(objtype); if(!(objtype == '.jpg'||objtype == '.png')) { alert("请上传jpg、png类型图片"); return false; }else{ $.ajax({ type : 'post', url : '/uploaduserimgpre', data: formdata , processdata:false, async:false, cache: false, contenttype: false, success:function(re){ re.imgsrc = re.imgsrc.replace('public',''); re.imgsrc = re.imgsrc.replace(/\\/g,'\/'); $('#j_imgpic').attr('src',re.imgsrc); }, error:function(re){ console.log(re); } }); } });
nodejs app.js里代码
app.post('/uploaduserimgpre',routes.users.uploaduserimgpre);
routes/users.js 里代码
exports.uploaduserimgpre = function(req, res, next) { //生成multiparty对象,并配置上传目标路径 var form = new multiparty.form({uploaddir: './public/files/images'}); form.parse(req, function(err, fields, files) { var filestmp = json.stringify(files); if(err){ console.log('parse error: ' + err); } else { testjson = eval("(" + filestmp+ ")"); console.log(testjson.filefield[0].path); res.json({imgsrc:testjson.filefield[0].path}) console.log('rename ok'); } }); }
部分说明:
文件上传至服务器后 路径path变为:public\files\images\w-jy9ysxspjnpqhslzgvdxbk.jpg
由于在app.js中设置过public为默认路径,所以整理地址时需要去掉public,并且把‘\'变成‘/'
app.use(express.static(path.join(__dirname, 'public')));
最后效果大概是这样的,html部分不一样~我的是jade模板,还有css什么的,并木有列出来
点击空白处,上传图片,接下来的功能就是点击上传把地址放到数据库里~(这个功能还木有做呢)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Vue和Bootstrap的整合思路详解
下一篇: SQL单表查询