摘要:因為升級到新的版本,之前的通過很多上傳圖片的方式都已經不適用了,所以自己就寫了一個對于上傳圖片的小記錄一下心得。
因為升級到新的node版本,之前的通過很多上傳圖片的方式都已經不適用了,所以自己就寫了一個對于 koa2上傳圖片的小demo,記錄一下心得。
廢話不多說,下面直接上代碼,里面都有注釋。
const Koa = require("koa"); const route = require("koa-route"); const serve = require("koa-static"); const inspect = require("util").inspect const 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() // 空間對應的機房 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) } }) }) } // 上傳到本地服務器 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");
然后在同一級目錄下,創建一個public文件夾,然后在下面新建一個 index.html,因為我們上面已經把這個文件夾設置為靜態訪問文件夾了, public/index.html 的代碼為
Document
選擇好圖片,然后點擊提交,就可以上傳到你的七牛空間啦!
文章博客地址: http://blog.naice.me/articles
ps: 如果對你有幫助請隨手丟一個 start 哦
源代碼在 github: https://github.com/naihe138/k...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84430.html
摘要:數據遷移過程中的速率問題。關閉源站數據遷移典型案例剖析七牛客戶陌陌的數據量非常大,如果采用常用的傳輸辦法,整個遷移過程要耗時半年,并且會嚴重影響線上的業務。為此,七牛為陌陌制定了個性化的數據遷移方案。 showImg(http://sharlyne-lee.qiniudn.com/m1.png); 無論是計劃擁抱云服務還是打算從正在使用的云服務切換到另外一家,這其中數據的遷移是很關鍵...
摘要:,在后續測試時遇到一個詭異,當文件過大時,任務腳本上傳到七牛云失敗。當我遇到大文件無法上傳到七牛云時,斷點調試到這里,發現返回的是。后來還真被我找到了,七牛云官方提供一個腳本工具。 業務場景 需求 我們項目有一個文件上傳需求,需要從客戶端上傳到七牛云的對象存儲和自己的應用服務器上。這里使用七牛云主要是實現下載分發。應用服務器需要留一份是因為后續需要做文件分析(并且是上傳后需要立馬分析出...
摘要:如果看完此文依然不解的還想使用七牛的,請站內信聯系明月,我可以收費全套代勞,費用不高配置快速當天見效效果明顯免費維護歡迎惠顧。 最近明月使用七牛加速自己博客初見成效后,也分享了不少七牛方面的經驗,很多站長也向明月咨詢了七牛方面的問題,本著分享的精神,明月今天就當一次義務的七牛推廣員給大家講解一番。showImg(https://segmentfault.com/img/bVMhUH?w...
摘要:如果看完此文依然不解的還想使用七牛的,請站內信聯系明月,我可以收費全套代勞,費用不高配置快速當天見效效果明顯免費維護歡迎惠顧。 最近明月使用七牛加速自己博客初見成效后,也分享了不少七牛方面的經驗,很多站長也向明月咨詢了七牛方面的問題,本著分享的精神,明月今天就當一次義務的七牛推廣員給大家講解一番。showImg(https://segmentfault.com/img/bVMhUH?w...
摘要:基于七牛云存儲官方構建。使用此構建您的網絡應用程序,能讓您以非常便捷地方式將數據安全地存儲到七牛云存儲上。應用接入獲取和要接入七牛云存儲,您需要擁有一對有效的和用來進行簽名認證。文件下載七牛云存儲上的資源下載分為公有資源下載和私有資源下載。 此 SDK 適用于 PHP 5.1.0 及其以上版本。基于 七牛云存儲官方API 構建。使用此 SDK 構建您的網絡應用程序,能讓您以非常便捷地方...
閱讀 1451·2023-04-25 19:00
閱讀 4145·2021-11-17 17:00
閱讀 1759·2021-11-11 16:55
閱讀 1518·2021-10-14 09:43
閱讀 3115·2021-09-30 09:58
閱讀 853·2021-09-02 15:11
閱讀 2121·2019-08-30 12:56
閱讀 1401·2019-08-30 11:12