使用layui+express实现用户头像的修改(图片上传模块使用阿里云OSS对象存储)

本文主要讲解如何使用nodejs实现修改用户头像的功能

实现效果如下:

1.点击「修改头像」,从本地选择图片,点击「确认」

2.成功修改头像,并更新页面头像

 

1.参考阿里云官方实例,配置oss存储

Web端上传数据至OSS_对象存储-阿里云帮助中心

2.OSS上传图片并返回图片链接

2.1 引用oss配置文件,并引用multiparty用于解析图片

var fo = require('../module/oss_config')
var multiparty = require('multiparty'); 
var myDate = new Date();

2.2 实现oss上传图片的接口

var f =0;
router.post('/index/upload', function(req, res1, next) {
  console.log("进入")
  f++;
  var id = myDate.getTime()+f //根据时间生成文件名称
  var filename = id.toString()
  var form = new multiparty.Form();
    form.parse(req, function(err, fields, files) {
      fo.fileOperation.putFile(filename,files.file[0].path).then(res=>{
        console.log(res)
        res1.send({//返回图片url
          data:res,
          code:0
        })
      })
    });
});

3.实现头像的修改 接口

//   修改头像
exports.updata_u_url = (req, res, next) => {
    console.log("1", req.body)
    var newurl = req.body.newurl; //新头像的url
    var u_id = req.body.u_id;  //用户id
    sql=  `update userinfo set u_photo_url="${newurl}" WHERE u_id ="${u_id}"`
    db.query(sql, (results, fields) => {
        console.log("123", results, fields);//操作成功回调函数返回的结果
        if(results.affectedRows == 1){
            res.status(200).json({
                code: 200,
                msg: '修改成功',
            })
        }else{
            res.status(200).json({
                code: 300,
                msg: '修改失败',
            })
        }    
    })
}

4.前端代码的实现

4.1 html代码

  <div class="layui-form layui-form-pane layui-tab-item">
             <div class="layui-form-item">
                   <div class="avatar-add">
               <p>建议尺寸168*168,支持jpg、png、gif,最大不能超过50KB(随便上传吧!)</p>
                            
                  <button type="button" class="layui-btn upload-img layui-btn" id="up_photo">
                     <i class="layui-icon">&#xe67c;</i>修改头像
                               </button>
                             <img id="u_photo1" src="/">
                              <span class="loading"></span>
                      </div>
                 </div>
   </div>

4.2js代码

依次调用上传图片的接口和更新头像url的接口,并异步执行 更新当前页面上的url 的代码

      // 更换头像
        layui.use('upload', function () {
            var upload = layui.upload;

            //执行实例
            var uploadInst = upload.render({
                elem: '#up_photo' //绑定元素
                , url: '/index/upload' //上传接口
                , accept: 'images'//这里可以设置上传的类型限制
                , auto: true 
                , done: function (res) {
                    console.log(res);
                    if (res.code === 0) {
                        var url = res.data
                        console.log("url", url)
                        $.ajax({   //调用上传图片的接口
                            url: '/user/userset/updata_p_url',
                            type: 'post',
                            data: {
                                u_id: layui.sessionData('userinfo').session.userid,
                                newurl: res.data
                            },// 这次请求要携带的数据

                            success(res) {
                                if (res.code === 200) {
                                    layer.msg("修改成功!")

                                    $.ajax({  //上传成功,调用更新头像的接口
                                        method: 'POST',
                                        url: '/user/userset/updatasession', // 请求的URL地址
                                        data: {
                                            u_id: layui.sessionData('userinfo').session.userid  //根据sessionData 获取当前用户的id
                                        },// 这次请求要携带的数据
                                        dataType: "json",
                                        success: function (res) {
                                            console.log("session", res)
                                            console.log(1)
                                        }
                                    }).then(() => {  //更新成功后 异步执行 更新页面上的头像url 同时更新session中的url
                                        var sessionData = layui.sessionData('userinfo').session
                                        console.log("url", url)
                                        sessionData.u_photo_url = url
                                        layui.sessionData('userinfo', {
                                            key: 'session'
                                            , value: sessionData
                                        });
                                        document.getElementById("u_photo").src = url;
                                        document.getElementById("u_photo1").src = url;

                                        console.log(2)
                                    })
                                }
                                else {
                                    layer.msg("修改失败!")
                                }
                            }
                        })
                    } else {
                        layer.msg("1上传失败!")
                    }
                }
                , error: function () {
                    //请求异常回调
                    layer.msg("上传失败!")
                }
            });
        });

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SpringBoot可以通过整合阿里云OSS对象存储服务来实现文件上传和管理功能。具体实现可以参考以下步骤: 1. 在service层定义FileService接口,该接口包含上传文件到阿里云OSS的方法。例如,可以使用MultipartFile作为参数,返回上传成功后的文件URL。 2. 在controller层编写FileApiController类,该类使用@RestController注解标识为控制器,并使用@RequestMapping注解指定请求路径。在该类中,通过@Autowired注入FileService,并在文件上传的接口方法中调用FileService的上传文件方法并返回上传成功后的文件URL。 3. 在配置文件中配置阿里云OSS的相关信息,包括accessKey、secretKey、bucketName等。可以使用SpringBoot提供的@ConfigurationProperties注解来读取配置文件中的信息。 4. 在pom.xml文件中添加阿里云OSS SDK的依赖。 5. 编写上传文件的前端界面,可以使用HTML或者前端框架如Vue.js、React等。 通过以上步骤的实现,SpringBoot就可以整合阿里云OSS对象存储服务,实现文件上传和管理功能。这样可以将文件存储在阿里云OSS中,提高文件的安全性和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合阿里云OSS对象存储服务的实现](https://download.csdn.net/download/weixin_38649091/12721580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [全网最详细SpringBoot、SpringCloud整合阿里云OSS对象存储服务](https://blog.csdn.net/weixin_55076626/article/details/127924003)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值