H5-mui+nodejs+mysql上传存储头像实现

H5-mui+nodejs+mysql上传存储头像实现

关于h5移动应用开发,但凡有账户的项目都需要实现上传头像的功能
之前写课业小项目(音乐播放器)的时候在网上找了很久都没找到合适的,所以解决了这个问题后整理了一下课业小项目的部分代码分享一下

前端使用H5-mui

mui.plusReady(function(){//mui调用系统底层必须用plusReady
			document.getElementById("icon").addEventListener("tap",function(){
					plus.gallery.pick(function(path){//serverPath+"/upimg"是上传地址
						var task=plus.uploader.createUpload(serverPath+"/upimg",{},function(t,s){//新建上传任务
							if(s==200){
								mui.alert("上传成功");
							}else{
								mui.alert("上传成功");
							}
						});
						task.addFile(path,{"key":"icon","name":localStorage.user,"mime":"image/png"});//localStorage.user是用户ID,标识图片;mime是文件类型
						task.start();   //上传          
						
					},function(){
						mui.alert("选择失败!");
					});
				});
		});

后台采用nodejs,使用formidable模块接收图片

var http=require("http");
var url=require("url");
var server=http.createServer(function(req,res){
var param=url.parse(req.url,true);
 var strQuery=param.pathname;
if(strQuery==="/upimg"){//上传修改头像
        console.log("upimg");
    	var form= new formidable.IncomingForm();
        form.uploadDir="./imgs";//图片存储地址
        form.keepExtensions=true;//保留文件后缀名
        /*
        这里我不管怎么设置,后缀名都会消失,但是在我同学电脑上就没事,应该是我的电脑问题,所以我在下面存储的时候加了“.png”的后缀名,引用的时候记得适当修改
        */
        form.parse(req,function(err,fields,files){
            var str={//需要存进数据库的内容
                path:"/"+files.icon.path+".png",//图片存储路径
                id:files.icon.name//前台传来的用户ID
            };
            var oldpath=files.icon.path;//以下五行是因为后缀名问题做出的文件名更改
            var newpath=files.icon.path+".png";//无该问题的可以删除,但需要将str里path后面的“.png”删除
            fs.rename(oldpath,newpath,(err)=>{
                if(err) throw err;
            });
            Params.postData(req,function(param){//这里是更改数据库内容了,我的数据库连接方式和Post解析方法会在下面给出
                Account.upimg(str,function(err,rows){
                    var rtn={};
                    if(err || rows.length===0){
                        rtn={
                            state:"err"
                        };
                    }else{
                       
                        rtn={
                            state:"success"
                        };
                        
                    }
                    var sJson=JSON.stringify(rtn);
                    res.end(sJson);
                });
            });
        });
    }
    });
server.listen(3000);

数据库修改方面:数据库里img属性存储的是图片地址

unction upimg(params,cb){
    var sql="update user set img=? where id=?";//数据库里img存储的是图片地址
    var p=[params.path,params.id];
    pool.getConnection(function(err,conn){
        conn.query(sql,p,function(err,rows){
            cb(err,rows);
            conn.release();
        });
    });
}

下面是工具包Params内容,希望不是多此一举

var url=require("url");
var querystring =require("querystring");
function postData(req,cb){
    var postdata="";
    req.on("data",function(buffer){
        postdata+=buffer;
    });
    req.on("end",function(){
        var query=querystring.parse(postdata);
        cb(query);
    });
}
function getData(req,cb){
    var param=url.parse(req.url,true).query;
    cb(param);
}

exports.postData=postData;
exports.getData=getData;

有疑问的可以在评论区提出
但笔者不经常在线,请恕我不能及时回复

接下来有时间的话,笔者会整理一下音乐播放器小项目的代码,将各个功能的实现详细发表

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值