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

这篇具有很好参考价值的文章主要介绍了微信小程序上传头像的临时路径,持久化保存到服务器与数据库(nodejs后台开发)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

一开始我是这么写的:

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

<view class="btnavatar">
    <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar"  value='{{avatarUrl}}'>
   <view>
    <image class="avatar" src="{{avatarUrl}}"></image>
   </view>
  </button>
</view>


对应的微信小程序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代码如下:

    <view data-weui-theme="{{theme}}" class="view-2">
   <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar"  value='{{avatarUrl}}'>
   <view>
    <image class="avatar" src="{{avatarUrl}}"></image>
   </view>
  </button>


对应的微信小程序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;

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

头像存入数据库,微信小程序,服务器,数据库,node.js,小程序,notepad++

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

头像存入数据库,微信小程序,服务器,数据库,node.js,小程序,notepad++

 目前解决办法我也已经找到了:点击阅读完美解决方案http://t.csdn.cn/nI1pI文章来源地址https://www.toymoban.com/news/detail-621329.html

到了这里,关于微信小程序上传头像的临时路径,持久化保存到服务器与数据库(nodejs后台开发)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序头像上传(二---完结)

    效果展示: (1)  : \\\"点击登录\\\" (2)  : 登录后,会显示默认的微信头像与昵称   (3)  :  再次点击头像可以选择一张图片当头像,( 真实环境可以选择相册图片或拍摄一张 )     (1)  : 确认选择的图片后会更新到页面中,并且下次登录也会显示上一步中选择的图片,而不会选择微信

    2024年02月11日
    浏览(22)
  • 微信小程序新版头像昵称上传

    官方文档:小程序用户头像昵称获取规则调整公告 | 微信开放社区 头像昵称填写 | 微信开放文档 为我们小程序写了一个头像昵称上传的组件总结了下 需要注意的点: 我们后端服务器存的老用户的头像昵称有的是:之前早版本( wx.getUserInfo )能获取到的用户真实微信头像昵

    2024年02月11日
    浏览(33)
  • uniapp微信小程序开发踩坑日记:获取用户头像并持久化存储到后端服务器

    原来获取用户头像和昵称调用的是uni.getUserInfo(OBJECT)接口,但是2021年4月28日24时后发布的小程序新版本,无法通过uni.getUserInfo与button open-type=\\\"getUserInfo\\\"/获取用户个人信息(头像、昵称、性别与地区) 详细情况见官方文档:小程序登录、用户信息相关接口调整说明 | 微信开放社

    2024年04月14日
    浏览(29)
  • 微信小程序个人资料(修改头像,上传图片和拍照)

    首先是wxml 开始他的js,有两种方法,第一张自己写的js 第二种微信自带的wxml   wxss

    2024年04月26日
    浏览(33)
  • 【Unity】数据持久化路径Application.persistentDataPath

    今天突然想到这个路径Application.persistentDataPath,热更的重要路径,该文件夹可读可写,在移动端唯一一个可读写操作的文件夹。 移动端可以将本地的资源(资源MD5值配置表)等一些文件放到StreamingAssets文件夹下,通过Copy到persistentDataPath下与服务器的版本文件配置表作比对,

    2023年04月10日
    浏览(32)
  • 修复微信小程序获取头像的bug,微信小程序新版头像API使用

    接着我之前发布的一篇文章:微信小程序上传头像的临时路径,持久化保存到服务器与数据库(nodejs后台开发)_盒子猫君的博客-CSDN博客 今天我就来解决掉之前的问题吧! 从之前的后台报错来看,获取到的tempFilePath值和avatarUrl的值相同,都是http://tmp,不过头像都已经上传成

    2024年02月07日
    浏览(29)
  • 最新微信小程序获取头像昵称,直接用,uniapp获取微信小程序头像昵称

    微信小程序获取用户头像和昵称一个开放接口是wx.getUserInfo,2021年4月5日被废弃,原因是很多开发者在打开小程序时就通过组件方式唤起getUserInfo弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户,后面新

    2024年02月11日
    浏览(29)
  • 修复微信小程序不能获取头像和昵称的bug,微信小程序新版头像昵称API使用

    大厂程序员都是有KPI绩效考核的,所以他们不能闲着,每天要想着怎么优化程序代码、怎么满足奇葩用户的需求,所以苦逼了我们这些小公司程序员,微信一个小小的API接口改动,可能就让一个小公司因此损失惨重,甚至直接面临倒闭。鹅厂可不管你这些小公司的死活,毕竟

    2024年02月11日
    浏览(46)
  • Vue3.0跨端Web SDK访问微信小程序云储存,文件上传路径不存在/文件受损无法显示问题(已解决)

    需要vue3.0作为pc端的后台管理来连接微信小程序客户端 需要Web SDK的引入,实现vue3.0接入云开发环境 需要以云环境作为线上服务器,将vue3.0上传的本地文件通过云环境进入云储存,并将文件在云端生成云端快捷访问路径及http/https路径(公网路径) 修改云端储存的权限代码:

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包