文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

微信小程序上传头像的临时路径,持久化保存到服务器与数据库(nodejs后台开发)

2023-08-31 07:30

关注

从微信小程序中返回的用户头像临时地址 http://tmp/H0GP7BW5HTQs846c0d9deef32d42f2203340efc4a5c3.jpeg 会失效,且只能一段时间内在微信访问,并且无法在公网访问用户头像临时地址avatarUrl。

所以需要将临时地址avatarUrl转成实际可用的地址保存到mysql数据库的wxusers表的avatarUrl列中,同时将新的图片路径保存到服务器的./public/upload目录下。

一开始我是这么写的:

微信小程序通过授权获取用户头像的wxml代码如下

    


对应的微信小程序TS代码如下

onChooseAvatar(e) {const { avatarUrl } = e.detail this.setData({  avatarUrl,})console.log("获取到用户输入的头像为"+ avatarUrl)     // 登录     var that = this;     wx.login({         success: function(res) {             //console.log(res.code)             // 发送 res.code 到后台换取 openId, sessionKey, unionId             if (res.code){                 wx.request({                     url: config.apiUrl + '/api/getOpenid',                     method: 'POST',                     data:{                         code:res.code,                     },                     success:function(response){                         console.log("成功获取到用户openid 下面开始获取头像:",response.data.openid)                         const openid = response.data.openid;wx.request({    url: config.apiUrl + '/api/avatarUrl',    method: 'POST',    data: {        openid,        avatarUrl,    },    success: function(res) {        console.log('submit success');        console.log("成功获取到用户头像存入数据库:",avatarUrl)    },    fail: function(res) {        console.log('submit fail');    }})}})}else{console.log('wx.login()调用失败!'+res.errMsg);}}})},


以nodejs为后台保存头像到mysql数据库的路由代码如下

const express = require('express');const router = express.Router();const sql = require('../sql');const request = require("request");//存入头像router.post('/avatarUrl', (req, res) => {    const openid = req.body.openid;    const avatarUrl = req.body.avatarUrl;    const nickname = req.body.nickname;    const phoneNumber = req.body.phoneNumber;    const unionid = req.body.unionid;    // 创建MySQL查询    const sqlStr = 'SELECT * FROM wxusers WHERE openid = ?';    //res.json({openid: openid});    console.log(`查询到了`)    // 查询数据库    sql.query(sqlStr, [openid], function(err, result) {        if (err) {            console.error(err);            res.status(500).send('Database error');        } else {            // 检查是否有匹配的openId            if (result.length > 0) {                const sqlStr = `UPDATE wxusers SET avatarUrl = '${avatarUrl}' WHERE openid = '${openid}'`;                sql.query(sqlStr, (err, result) => {                    if (err) throw err;                    res.send('Data updated in the database.');                });            } else {                const sqlStr = `INSERT INTO wxusers (openid, avatarUrl, nickname, phoneNumber, unionid) VALUES ('${openid}','${avatarUrl}', 'default_user', 'default_user', 'default_user')`;                sql.query(sqlStr, [openid, avatarUrl, nickname, phoneNumber, unionid], (err, result) => {                    if (err) throw err;                    res.send('Data inserted into the database.');                });            }        }    });});module.exports = router;

接下来是第二次修改的,微信开发者工具在本地测试没有问题:

微信小程序通过授权获取用户头像的wxml代码如下:

       


对应的微信小程序TS代码如下:

onChooseAvatar(e) {    const { avatarUrl } = e.detail    this.setData({    avatarUrl,    })    console.log("获取到用户头像avatarUrl:"+ avatarUrl)    // 下载头像图片    wx.downloadFile({    url: avatarUrl,    success(res) {    if (res.statusCode === 200) {    console.log('download success');    const tempFilePath = res.tempFilePath    console.log("获取到用户头像tempFilePath:"+ tempFilePath)    // 上传下载的图片    wx.uploadFile({    url: config.apiUrl + '/api/avatarUrl',    filePath: tempFilePath,    name: 'file',    formData: {    'openid': wx.getStorageSync('openid')    },    success(res) {    const data = JSON.parse(res.data)    console.log('upload success');    console.log("成功获取到用户头像存入数据库:", data.path);    },    fail(res) {    console.log('upload fail');    }    })    }    }    })    },


以nodejs为后台保存头像到mysql数据库的路由代码如下:

const express = require('express');const router = express.Router();const sql = require('../sql');const multer = require('multer');// 设置文件上传的目录const storage = multer.diskStorage({    destination: function(req, file, cb) {        cb(null, './public/upload')    },    filename: function(req, file, cb) {        cb(null, Date.now() + '-' + file.originalname)    }})const upload = multer({ storage: storage })router.post('/avatarUrl', upload.single('file'), (req, res) => {    const openid = req.body.openid;    const avatarUrl = '/upload/' + req.file.filename;// 创建MySQL查询    const sqlStr = 'SELECT * FROM wxusers WHERE openid = ?';// 查询数据库    sql.query(sqlStr, [openid], function(err, result) {        if (err) {            console.error(err);            res.status(500).send('Database error');        } else {// 检查是否有匹配的openId            if (result.length > 0) {                const sqlStr = `UPDATE wxusers SET avatarUrl = '${avatarUrl}' WHERE openid = '${openid}'`;                sql.query(sqlStr, (err, result) => {                    if (err) throw err;                    res.json({ path: avatarUrl });                });                console.log("更新新路径", avatarUrl);            } else {                const sqlStr = `INSERT INTO wxusers (openid, avatarUrl) VALUES ('${openid}','${avatarUrl}')`;                sql.query(sqlStr, [openid, avatarUrl], (err, result) => {                    if (err) throw err;                    res.json({ path: avatarUrl });                });                console.log("插入新路径", avatarUrl);            }        }    });});module.exports = router;

本地运行后微信开发者显示下面的内容:

 然后将服务搬到服务器上运行之后,开始报错:

 目前解决办法我也已经找到了:点击阅读完美解决方案icon-default.png?t=N6B9http://t.csdn.cn/nI1pI

来源地址:https://blog.csdn.net/qq_25501981/article/details/131493971

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯