vue+koa做圖片上傳

vue圖片上傳幕袱,使用elementui上傳組件
前端選擇圖片后访得,立即上傳(也可以手動(dòng)上傳)
后臺(tái)koa監(jiān)聽請(qǐng)求路由州既,處理數(shù)據(jù)氮凝,將上傳的圖片生成一個(gè)url返回給前端
前端將url羔巢,連同別的數(shù)據(jù)一并提交給后端,寫入數(shù)據(jù)庫

vue前端代碼部分
<el-upload
            action="http://localhost:3001/api/upload"   //上傳圖片的地址
            list-type="picture-card"   //選擇后縮略圖展示
            multiple  //允許選擇多圖
            :on-preview="preview"   //點(diǎn)擊查看圖片預(yù)覽的處理方法
            :on-success="afterSuccessUpload"   //自動(dòng)上傳成功后的回調(diào)
          >
            <i class="el-icon-plus"></i>
 </el-upload>
<el-dialog :visible.sync="dialogVisible">   //下面是圖片縮略圖部分
            <img width="100%" :src="dialogImageUrl" alt />
</el-dialog>

methods方法:
    preview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
  afterSuccessUpload(file) {
      console.log(file)  //上傳成功后罩阵,后臺(tái)會(huì)返回前臺(tái)一個(gè)圖片鏈接竿秆,把這個(gè)鏈接后續(xù)寫入數(shù)據(jù)庫
    },

下面是koa后臺(tái)的處理方法,需要使用koa-multer插件
一般會(huì)先去封裝一個(gè)upload方法稿壁,放到models目錄里幽钢,供后續(xù)代碼使用
koa后臺(tái)路由監(jiān)聽post的上傳請(qǐng)求,然后通過調(diào)用upload方法傅是,處理上傳文件匪燕,生成鏈接蕾羊,返回給前端

首先是封裝upload.js代碼部分
const multer = require('koa-multer')
const path=require("path");
const destPath=path.join(__dirname,"../uploadImgs");
//配置
var storage = multer.diskStorage({
    //文件保存路徑
    destination: function (req, file, cb) {
        cb(null, destPath)
    },
    //修改文件名稱
    filename: function (req, file, cb) {
        var fileFormat = (file.originalname).split(".");  //以點(diǎn)分割成數(shù)組,數(shù)組的最后一項(xiàng)就是后綴名
        cb(null, Date.now() + "." + fileFormat[fileFormat.length - 1]);
    }
})
//加載配置
var upload = multer({
     storage: storage,
     limits: {
        fileSize: 1024*1024/2 // 限制512KB
      }
});

module.exports=upload;

將上述模塊暴露出去以后帽驯,koa路由處理方法龟再,就可以使用了

koa后臺(tái)監(jiān)聽post請(qǐng)求,將圖片上傳后生成鏈接返回前端
const upload = require("../models/upload.js")
router.post('/upload', upload.single('file'), async (ctx, next) => {
    ctx.body = {
        filename: ctx.req.file.filename
    }
})
這樣前端就會(huì)獲得一個(gè)圖片鏈接尼变,前端和別的數(shù)據(jù)一并傳給后端利凑,寫入數(shù)據(jù)庫

·······························································································
下面是vue+koa上傳到七牛云的案例
前端要上傳圖片到七牛云,需要有一個(gè)token進(jìn)行授權(quán)操作
難點(diǎn)在于要使用后端koa生成一個(gè)token授權(quán)給前端
每次需要上傳前享甸,前端向后端申請(qǐng)一個(gè)token
前端直傳圖片到七牛云截碴,七牛云返回前端一個(gè)圖片url
前端把url連同別的信息梳侨,一并提交給后臺(tái)蛉威,寫入數(shù)據(jù)庫

第一,服務(wù)端頒發(fā)上傳憑證到前端走哺,前端攜帶憑證蚯嫌,采用“客戶端直傳”的方式直接上傳到七牛云。
先寫后端部分吧丙躏,需要使用到官方提供的node.js    sdk
1. 安裝七牛云依賴   npm i qiniu
2. 在api模塊引入七牛云   const qiniu = require("qiniu");
生成token部分代碼如下
router.get("/getuploadtoken", async (ctx, next) => {
    const accessKey = 'MxExXov-';   //秘鑰管理中的AK
    const secretKey = 'ETapkF';    //秘鑰管理中的SK
    const bucket = "vueimgs";     //創(chuàng)建的存儲(chǔ)空間文件夾名字
    const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
    const options = {
        scope: bucket,
        expires: 3600 * 24,    //過期時(shí)間
    };
    const putPolicy = new qiniu.rs.PutPolicy(options);
    const uploadToken = putPolicy.uploadToken(mac);
    ctx.body = uploadToken;   //當(dāng)前端請(qǐng)求獲得token的時(shí)候择示,就把生成的token返回給前端
})


vue前端部分
<el-upload
            action="http://upload.qiniup.com"     //這個(gè)地址,和七牛上創(chuàng)建時(shí)選擇的區(qū)域有關(guān)
            list-type="picture-card"
            :on-preview="preview"
            :on-success="afterSuccessUpload"
            :data="postData"
          >
            <i class="el-icon-plus"></i>
 </el-upload>
其中的 :data="postData"是用來放七牛云的token的
data里面需要放一個(gè)postData: {    token:""    }
created里面進(jìn)入即調(diào)用一個(gè)methods里面定義的方法晒旅,獲取token的方法
getUploadToken(){
      this.$http.get("/getuploadtoken")
        .then(res=>{
          this.postData.token=res.data;
        })
    }
一進(jìn)入上傳頁面栅盲,即請(qǐng)求token

afterSuccessUpload(res) {
      this.form.img = "http://py0mg402k.bkt.clouddn.com/" + res.key;
    },
選中圖片后直接上傳,上傳后七牛返回給前端一個(gè)res废恋,把bucket文件url+res.key即可生成圖片鏈接

上傳地址谈秫,參考 (官方文檔)
token生成,參考官方文檔
感謝前輩的文檔鱼鼓,EsunR拟烫,
陌上兮月

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市迄本,隨后出現(xiàn)的幾起案子硕淑,更是在濱河造成了極大的恐慌,老刑警劉巖嘉赎,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件置媳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡公条,警方通過查閱死者的電腦和手機(jī)半开,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赃份,“玉大人寂拆,你說我怎么就攤上這事奢米。” “怎么了纠永?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵鬓长,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我尝江,道長(zhǎng)涉波,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任炭序,我火速辦了婚禮啤覆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惭聂。我一直安慰自己窗声,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布辜纲。 她就那樣靜靜地躺著笨觅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耕腾。 梳的紋絲不亂的頭發(fā)上见剩,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音扫俺,去河邊找鬼苍苞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛狼纬,可吹牛的內(nèi)容都是我干的羹呵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼畸颅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼担巩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起没炒,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤涛癌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后送火,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拳话,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年种吸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弃衍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坚俗,死狀恐怖镜盯,靈堂內(nèi)的尸體忽然破棺而出岸裙,到底是詐尸還是另有隱情,我是刑警寧澤速缆,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布降允,位于F島的核電站,受9級(jí)特大地震影響艺糜,放射性物質(zhì)發(fā)生泄漏剧董。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一破停、第九天 我趴在偏房一處隱蔽的房頂上張望翅楼。 院中可真熱鬧,春花似錦真慢、人聲如沸毅臊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褂微。三九已至功蜓,卻和暖如春园爷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背式撼。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工童社, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人著隆。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓扰楼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親美浦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弦赖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容