node上傳圖片到七牛云上更換頭像

node怎么上傳頭像到七牛云然后更換頭像映穗,之前也做過(guò)這個(gè)小功能.
個(gè)人說(shuō)說(shuō)如何實(shí)現(xiàn)以及幾個(gè)坑點(diǎn).前端基于vue(基于什么都無(wú)所謂),后端node+express

前端代碼

拿到圖片流 發(fā)送到后端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 對(duì)象 
        var reader = new FileReader()
        reader.readAsDataURL(file)
        reader.onload = (e) => {
          // e.target.result 就是要上傳到后端的圖片流 base64 
          // 一般情況下不會(huì)選擇完圖片就立刻請(qǐng)求上傳接口
          // 有可能進(jìn)行裁切,旋轉(zhuǎn)等等操作 點(diǎn)擊確定之后才將數(shù)據(jù)流上傳到后端
        }

這里有個(gè)問(wèn)題: 如果你想上傳多張圖片到后端 比如 files = [{img1:xx}, {img2: xx}] express 需要序列化之后才能接收到對(duì)象類型 => JSON.stringify(files)

創(chuàng)建七牛云存儲(chǔ)

創(chuàng)建一個(gè)七牛云賬號(hào): 創(chuàng)建一個(gè)對(duì)象存儲(chǔ)幕随,不懂請(qǐng)百度...
新建存儲(chǔ)空間: 一定要選擇華東 不然后面會(huì)上傳失敗.
假設(shè)我創(chuàng)建了一個(gè)空間名為: 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({
// 秘鑰在控制模板->個(gè)人中心->密鑰管理中可以看到
    accessKey: '填寫你的秘鑰',
    secretKey: '填寫你的秘鑰',
// 空間名
    bucket: bucket,
// 這個(gè)是你要生成的前綴(你的外鏈地址蚁滋,可以在空間中查看)
// 其實(shí)寫不寫都行,不寫后面也得寫.
    origin: 'http://ouibvkb9c.bkt.clouddn.com'
})

如下圖:

image.png

配置已經(jīng)完成,寫接口 用的是express赘淮, koa同理
主要做法是先接收前端的圖片流 轉(zhuǎn)換成圖片寫入本地image文件中辕录,然后再存儲(chǔ)到七牛云,再將本地生成的圖片刪除梢卸,需要新建一個(gè)image文件夾

// 上傳圖片
router.post('/upload', function (req, res, next) {
    // 接收前端圖片數(shù)據(jù)流
    var imgData = req.body.imgData;
    // 構(gòu)建圖片名 這個(gè)主要是生成唯一圖片名字利于存儲(chǔ) 當(dāng)然為了方便就寫時(shí)間戳 實(shí)際開(kāi)發(fā)可千萬(wàn)別 可能出現(xiàn)兩人同一時(shí)間
    var fileName = Date.now() + '.png';
    // 構(gòu)建圖片路徑 需要在上一層目錄下新建一個(gè)image
    var filePath = './image/' + fileName;
    // 過(guò)濾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 代表我要存在七牛云這個(gè)路徑下 您隨意 
// 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

大功告成走诞,如此就將前端發(fā)送過(guò)來(lái)的圖片流成功上傳到七牛云上,最后再寫一個(gè)更換頭像路徑的接口就好了.

源碼前端項(xiàng)目地址: 戳我
源碼node項(xiàng)目地址:戳我

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛤高,一起剝皮案震驚了整個(gè)濱河市蚣旱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戴陡,老刑警劉巖塞绿,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恤批,居然都是意外死亡异吻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門喜庞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诀浪,“玉大人棋返,你說(shuō)我怎么就攤上這事∷裢祝” “怎么了懊昨?”我有些...
    開(kāi)封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)春宣。 經(jīng)常有香客問(wèn)我酵颁,道長(zhǎng),這世上最難降的妖魔是什么月帝? 我笑而不...
    開(kāi)封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任躏惋,我火速辦了婚禮,結(jié)果婚禮上嚷辅,老公的妹妹穿的比我還像新娘簿姨。我一直安慰自己,他們只是感情好簸搞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布扁位。 她就那樣靜靜地躺著,像睡著了一般趁俊。 火紅的嫁衣襯著肌膚如雪域仇。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天寺擂,我揣著相機(jī)與錄音暇务,去河邊找鬼。 笑死怔软,一個(gè)胖子當(dāng)著我的面吹牛垦细,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挡逼,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼括改,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了家坎?” 一聲冷哼從身側(cè)響起嘱能,我...
    開(kāi)封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乘盖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體憔涉,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡订框,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兜叨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穿扳。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衩侥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矛物,到底是詐尸還是另有隱情茫死,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布履羞,位于F島的核電站峦萎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忆首。R本人自食惡果不足惜爱榔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糙及。 院中可真熱鬧详幽,春花似錦、人聲如沸浸锨。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柱搜。三九已至迟郎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冯凹,已是汗流浹背谎亩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宇姚,地道東北人匈庭。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浑劳,于是被迫代替她去往敵國(guó)和親阱持。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353