node上传图片到七牛云上更换头像

node怎么上传头像到七牛云然后更换头像,之前也做过这个小功能.
个人说说如何实现以及几个坑点.前端基于vue(基于什么都无所谓),后端node+express

前端代码

拿到图片流 发送到后端node

var file = e.target.files[0]
        // 判断是否图片
        if (!/\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/.test(e.target.value)) {
          alert('图片类型必须是.gif,jpeg,jpg,png,bmp中的一种')
          return false
        }
// 主要利用 FileReader 对象 
        var reader = new FileReader()
        reader.readAsDataURL(file)
        reader.onload = (e) => {
          // e.target.result 就是要上传到后端的图片流 base64 
          // 一般情况下不会选择完图片就立刻请求上传接口
          // 有可能进行裁切,旋转等等操作 点击确定之后才将数据流上传到后端
        }

这里有个问题: 如果你想上传多张图片到后端 比如 files = [{img1:xx}, {img2: xx}] express 需要序列化之后才能接收到对象类型 => JSON.stringify(files)

创建七牛云存储

创建一个七牛云账号: 创建一个对象存储,不懂请百度...
新建存储空间: 一定要选择华东 不然后面会上传失败.
假设我创建了一个空间名为: avatar-img-d

后端代码:

下载七牛云模块
地址 https://github.com/node-modules/qn

 cnpm i qn -S

code

// 读写文件模块
var fs = require('fs');
// 七牛云模块
var qn = require('qn');
// 空间名
var bucket = 'avatar-img-d';
// 七牛云配置
var client = qn.create({
// 秘钥在控制模板->个人中心->密钥管理中可以看到
    accessKey: '填写你的秘钥',
    secretKey: '填写你的秘钥',
// 空间名
    bucket: bucket,
// 这个是你要生成的前缀(你的外链地址,可以在空间中查看)
// 其实写不写都行,不写后面也得写.
    origin: 'http://ouibvkb9c.bkt.clouddn.com'
})

如下图:

image.png

配置已经完成,写接口 用的是express, koa同理
主要做法是先接收前端的图片流 转换成图片写入本地image文件中,然后再存储到七牛云,再将本地生成的图片删除,需要新建一个image文件夹

// 上传图片
router.post('/upload', function (req, res, next) {
    // 接收前端图片数据流
    var imgData = req.body.imgData;
    // 构建图片名 这个主要是生成唯一图片名字利于存储 当然为了方便就写时间戳 实际开发可千万别 可能出现两人同一时间
    var fileName = Date.now() + '.png';
    // 构建图片路径 需要在上一层目录下新建一个image
    var filePath = './image/' + fileName;
    // 过滤data:URL
    var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
    var dataBuffer = new Buffer(base64Data, 'base64');
    fs.writeFile(filePath, dataBuffer, function (err) {
        if (err) {
 // 写入失败
            res.end(JSON.stringify({status: '102', msg: '文件写入失败'}));
        } else {
// 写入成功 上传七牛云 filePath 代表刚刚写入本地图片的路径
// {key: `/avatar/${fileName}`}    avatar 代表我要存在七牛云这个路径下 您随意 
// fileName 代表刚刚生成的文件名
            client.uploadFile(filePath, {key: `/avatar/${fileName}`}, function (err1, result) {
                if (err1) {
                    res.json({
                        status: '1',
                        msg: '上传失败'
                    });
                } else {
                    res.json({
                        status: '0',
                        result: {
                            path: result.url
                        },
                        msg: 'suc'
                    })
                }
                // 上传之后删除本地文件
                fs.unlinkSync(filePath);
            });
        }
    })
})

如下图:

image.png

大功告成,如此就将前端发送过来的图片流成功上传到七牛云上,最后再写一个更换头像路径的接口就好了.

源码前端项目地址: 戳我
源码node项目地址:戳我

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352