<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        node koa2實現上傳圖片并且同步上傳到七牛云存儲

        來源:懂視網 責編:小采 時間:2020-11-27 22:33:47
        文檔

        node koa2實現上傳圖片并且同步上傳到七牛云存儲

        node koa2實現上傳圖片并且同步上傳到七牛云存儲:因為升級到新的node版本,之前的通過很多上傳圖片的方式都已經不適用了,所以自己就寫了一個對于 koa2上傳圖片的小demo,記錄一下心得。 廢話不多說,下面直接上代碼,里面都有注釋。 const Koa = require('koa'); const route = requi
        推薦度:
        導讀node koa2實現上傳圖片并且同步上傳到七牛云存儲:因為升級到新的node版本,之前的通過很多上傳圖片的方式都已經不適用了,所以自己就寫了一個對于 koa2上傳圖片的小demo,記錄一下心得。 廢話不多說,下面直接上代碼,里面都有注釋。 const Koa = require('koa'); const route = requi

        因為升級到新的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 的代碼為

        <!DOCTYPE html>
        <html lang="en">
        <head>
         <meta charset="UTF-8">
         <title>Document</title>
        </head>
        <body>
         <input id="btn1" type="file" name="file"/> 
         <input id="btn2" type="submit" value="提交"/>
        </body>
        <script>
         
         var btn1 = document.querySelector('#btn1')
         var btn2 = document.querySelector('#btn2')
         var file = null
         btn1.addEventListener('change', function(e){
         file = e.target.files[0]
         })
        
         btn2.onclick = function(){
         var _data = new FormData();
         _data.append('file', file);
         xhr(_data)
         }
        
         var xhr = function(formdata){
         var xmlHttp = new XMLHttpRequest(); 
        
         xmlHttp.open("post","http://127.0.0.1:3001/upload", true); 
         
         xmlHttp.send(formdata);
        
         xmlHttp.onreadystatechange = function(){ 
         if(xmlHttp.readyState==4){ 
         if(xmlHttp.status==200){ 
         var data = xmlHttp.responseText; 
         console.log(data); 
         } 
         }
         }
         }
        </script>
        </html>
        
        

        選擇好圖片,然后點擊提交,就可以上傳到你的七牛空間啦!

        源代碼在 github: https://github.com/naihe138/koa-upload

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        node koa2實現上傳圖片并且同步上傳到七牛云存儲

        node koa2實現上傳圖片并且同步上傳到七牛云存儲:因為升級到新的node版本,之前的通過很多上傳圖片的方式都已經不適用了,所以自己就寫了一個對于 koa2上傳圖片的小demo,記錄一下心得。 廢話不多說,下面直接上代碼,里面都有注釋。 const Koa = require('koa'); const route = requi
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产成人免费AV在线播放| 一级毛片在线免费视频| 久久A级毛片免费观看| 好看的电影网站亚洲一区| 一级免费黄色大片| 亚洲国产精品激情在线观看| 久久人午夜亚洲精品无码区| 国产精品另类激情久久久免费| 亚洲中文字幕无码亚洲成A人片| 成人AV免费网址在线观看| 亚洲电影在线播放| 国产三级在线观看免费| 亚洲乱亚洲乱妇24p| 免费一级e一片在线播放| 一区二区三区在线免费| 亚洲精品二区国产综合野狼| 无码少妇精品一区二区免费动态 | 在线观看视频免费完整版| 亚洲日本人成中文字幕| 色吊丝永久在线观看最新免费| 国产精品亚洲专区无码唯爱网 | 两性色午夜视频免费播放| 西西人体44rt高清亚洲| 成人午夜免费福利视频| 亚洲精品天堂成人片AV在线播放| 国产免费69成人精品视频| 三级黄色在线免费观看| 亚洲的天堂av无码| 免费永久看黄在线观看app| 9久热精品免费观看视频| 亚洲高清在线mv| 国产一区视频在线免费观看| h在线看免费视频网站男男| 亚洲国产日韩一区高清在线| 毛片免费观看视频| 一本久久免费视频| 亚洲六月丁香六月婷婷色伊人| 国产成人免费一区二区三区| APP在线免费观看视频| 亚洲熟妇无码av另类vr影视| 亚洲一区精品无码|