国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

node koa2實現(xiàn)上傳圖片并且同步上傳到七牛云存儲

2024-05-06 15:13:34
字體:
供稿:網(wǎng)友

因為升級到新的node版本,之前的通過很多上傳圖片的方式都已經(jīng)不適用了,所以自己就寫了一個對于 koa2上傳圖片的小demo,記錄一下心得。

廢話不多說,下面直接上代碼,里面都有注釋。

const Koa = require('koa');const route = require('koa-route');const serve = require('koa-static');const inspect = require('util').inspectconst path = require('path')const os = require('os')const fs = require('fs')const Busboy = require('busboy')const qiniu = require('qiniu')const qiniuConfig = require('./qiniuconfig') const app = new Koa();app.use(serve(__dirname + '/public/')); // 寫入目錄const mkdirsSync = (dirname) => { if (fs.existsSync(dirname)) {  return true } else {  if (mkdirsSync(path.dirname(dirname))) {   fs.mkdirSync(dirname)   return true  } } return false}function getSuffix (fileName) { return fileName.split('.').pop()}// 重命名function Rename (fileName) { return Math.random().toString(16).substr(2) + '.' + getSuffix(fileName)}// 刪除文件function removeTemImage (path) { fs.unlink(path, (err) => {  if (err) {   throw err  } })}// 上傳到七牛function upToQiniu (filePath, key) { const accessKey = qiniuConfig.accessKey // 你的七牛的accessKey const secretKey = qiniuConfig.secretKey // 你的七牛的secretKey const mac = new qiniu.auth.digest.Mac(accessKey, secretKey) const options = {  scope: qiniuConfig.scope // 你的七牛存儲對象 } const putPolicy = new qiniu.rs.PutPolicy(options) const uploadToken = putPolicy.uploadToken(mac) const config = new qiniu.conf.Config() // 空間對應(yīng)的機房 config.zone = qiniu.zone.Zone_z2 const localFile = filePath const formUploader = new qiniu.form_up.FormUploader(config) const putExtra = new qiniu.form_up.PutExtra() // 文件上傳 return new Promise((resolved, reject) => {  formUploader.putFile(uploadToken, key, localFile, putExtra, function (respErr, respBody, respInfo) {   if (respErr) {    reject(respErr)   }   if (respInfo.statusCode == 200) {    resolved(respBody)   } else {    resolved(respBody)   }  }) })}// 上傳到本地服務(wù)器function uploadFile (ctx, options) { const _emmiter = new Busboy({headers: ctx.req.headers}) const fileType = options.fileType const filePath = path.join(options.path, fileType) const confirm = mkdirsSync(filePath) if (!confirm) {  return } console.log('start uploading...') return new Promise((resolve, reject) => {  _emmiter.on('file', function (fieldname, file, filename, encoding, mimetype) {   const fileName = Rename(filename)   const saveTo = path.join(path.join(filePath, fileName))   file.pipe(fs.createWriteStream(saveTo))   file.on('end', function () {    resolve({     imgPath: `/${fileType}/${fileName}`,     imgKey: fileName    })   })  })  _emmiter.on('finish', function () {   console.log('finished...')  })  _emmiter.on('error', function (err) {   console.log('err...')   reject(err)  })  ctx.req.pipe(_emmiter) })}app.use(route.post('/upload', async function(ctx, next) {  const serverPath = path.join(__dirname, './uploads/') // 獲取上存圖片 const result = await uploadFile(ctx, {  fileType: 'album',  path: serverPath }) const imgPath = path.join(serverPath, result.imgPath) // 上傳到七牛 const qiniu = await upToQiniu(imgPath, result.imgKey) // 上存到七牛之后 刪除原來的緩存圖片 removeTemImage(imgPath) ctx.body = {  imgUrl: `http://xxxxx(你的外鏈或者解析后七牛的路徑)/${qiniu.key}` }})); app.listen(3001);console.log('listening on port 3001');            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 吉安市| 仙居县| 绥芬河市| 辽源市| 济南市| 谢通门县| 株洲县| 沭阳县| 泰安市| 双江| 高雄市| 武冈市| 汉中市| 天门市| 定日县| 北碚区| 斗六市| 错那县| 长垣县| 濮阳县| 长岛县| 安远县| 恩平市| 隆化县| 邹平县| 忻城县| 清远市| 巨鹿县| 阳东县| 杭州市| 乌海市| 肃宁县| 同心县| 霍城县| 长寿区| 游戏| 永春县| 临汾市| SHOW| 红河县| 昌邑市|