亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

又拍云 Node.js 實現文件上傳、刪除功能

2024-05-06 16:46:37
字體:
來源:轉載
供稿:網友

Node.js 服務端

使用 Node.js + Express.js 實現 服務端

const express = require("express");const app = express();const axios = require('axios');app.set('port', process.env.PORT || 8082);// 靜態資源目錄,這里放在了根目錄,生產環境不允許這樣app.use(express.static(__dirname));// 啟動一個端口為 8082 的服務器app.listen(app.get('port'), () => { console.log("http://localhost:" + app.get('port'));});

準備 Base64、HMAC-SHA1、MD5 實現簽名認證

詳見:http://docs.upyun.com/api/authorization/#_5

const crypto = require("crypto");// MD5function MD5(value) { return crypto  .createHash("md5")  .update(value)  .digest("hex");}// Base64function base64(value) { return Buffer.from(value).toString("base64");}// hmacsha1function hmacsha1(secret, value) {  return crypto.createHmac('sha1', secret).update(value, 'utf-8').digest().toString('base64');}

上傳、刪除接口

 

const date = new Date().toGMTString();const bucketname = ""; // 空間名const key = ""; // 操作員const secret = ""; // 密碼const upyunUrl = 'http://v0.api.upyun.com/'// Uploadapp.get("/api/token/upload", (req, res) => { let fileName = (Math.random() * 100000000) >>> 0; let expiration = ((Date.now() / 1000) >>> 0) + 30 * 60; // 請求的過期時間,UNIX UTC 時間戳,單位秒。建議設為 30 分鐘 http://docs.upyun.com/api/form_api/ let method = "POST"; let policy = base64(  JSON.stringify({   bucket: bucketname,   // "save-key": "/" + fileName + "{.suffix}",   "save-key": "/{filename}{.suffix}",   expiration: expiration  }) ); let authorization =  "UPYUN " +  key +  ":" +  hmacsha1(MD5(secret), method + "&/" + bucketname + "&" + policy); res.json({  msg: "OK",  code: 200,  data: {   authorization: authorization,   policy: policy  } });});// Deleteapp.get('/api/token/del', (req, res) => { let item = req.query.item; let method = "DELETE" let authorization = "UPYUN " +  key +  ":" +   hmacsha1(MD5(secret), method + '&/' + bucketname + item + '&'+ date); axios({  url: upyunUrl + bucketname + item,  method: 'DELETE',  headers: {   'Authorization': authorization,   'Date': date  } }).then(response => {  res.json({   msg: "OK",   code: 200,   data: {}  });  }).catch(err => {  console.log('err', err) })})

跨域接口調用

const cors = require('cors');// CORS @see https://github.com/expressjs/corsapp.use(cors());

 

前端

前端使用 Vue.js 實現

引入 Bootstrap.css

 

<link rel="stylesheet" type="text/css" href="https://unpkg.com/bootstrap@4.1.3/dist/css/bootstrap.css"><script src="https://unpkg.com/axios/dist/axios.min.js"></script><!-- HTML --><div id="app"> <div class="card" style="margin: 50px auto; width: 300px;">  <div class="card-body">   <h5 class="card-title">UPYun Upload & Delete</h5>   <div class="card-text">    <div class="form-group">     <label for="file">Upload</label>     <input type="file" id="file" class="form-control-file" @change="onChange">     <div class="form-text text-muted">      <ul>        <li v-for="(item, index) in files">         {{item}} <a href="javascript:;" rel="external nofollow" @click="onDel(item, index)">Del</a>        </li>      </ul>     </div>    </div>   </div>  </div> </div></div>

引入 Vue.js、Axios

<script src="https://unpkg.com/vue@2.5.17/dist/vue.js"></script><script src="https://unpkg.com/axios/dist/axios.min.js"></script>

JS

const upUrl = 'http://v0.api.upyun.com/' // +空間名,如:http://v0.api.upyun.com/yun-temp  const baseApi = 'http://localhost:8082/api/'  let uploadInput;  let app = new Vue({   el: '#app',   data: {    files: []   },   methods: {    onChange: function () {     getToken(token => {      let formData = new FormData();      formData.append("file", uploadInput.files[0])      formData.append('policy', token.policy)      formData.append("authorization", token.authorization)      axios({       method: 'POST',       url: upUrl,       data: formData      }).then(res => {       res = res || {}       if (res.status !== 200) {        console.log('error')        return       }       let data = res.data || {}       this.files.push(data.url)       alert('Success')      }).catch(err => {       console.log(err);      });     });    },    onDel: function (item, index) {     this.files.splice(index, 1)     axios.request({      url: baseApi + 'token/del',      method: 'GET',      params: {       item: encodeURI(item)      }     }).then(res => {      alert('Deleted.')     }).catch(err => {      console.log(err)     })    }   },   mounted () {    uploadInput = $('file')   }  })  // DOM 獲取元素  function $ (el) {   return document.getElementById(el)  }  // 獲取 token  function getToken (fn) {   let token = window.localStorage.getItem('token');   token = JSON.parse(token) || {};   let nowTime = Date.now();   if (nowTime < token.expired && token.authorization && token.policy) {    fn(token)    return   }   axios({    method: 'get',    url: baseApi + 'token/upload'   })   .then(res => {    let data = res.data || {}    data = data.data || {}    const authorization = data.authorization    const policy = data.policy    const expired = ((Date.now() / 1000) >>> 0) + 30 * 60;    token = {     authorization,     policy,     expired    }    fn(token)    window.localStorage.setItem('token', JSON.stringify(token))   });  }

項目源碼

https://github.com/givebest/UPyun-upload-delete-node.js

總結

以上所述是小編給大家介紹的又拍云 Node.js 實現文件上傳、刪除,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲最大在线视频| 成人做爰www免费看视频网站| 精品国产欧美一区二区三区成人| 韩剧1988在线观看免费完整版| 成人激情视频网| 欧美日韩福利在线观看| 国产综合福利在线| 97超级碰在线看视频免费在线看| 精品国产老师黑色丝袜高跟鞋| 欧美日韩久久久久| 国产专区欧美专区| 国产精品午夜国产小视频| 亚洲精品一区中文| 日韩精品在线免费观看视频| 尤物九九久久国产精品的分类| 亚洲日韩欧美视频一区| 精品久久久久久中文字幕大豆网| 日本a级片电影一区二区| 欧美激情免费视频| 亚洲国内精品视频| 亚洲激情成人网| 亚洲黄页视频免费观看| 国产精品视频专区| 国产精品久久久久久久美男| 91精品国产99久久久久久| 色综合男人天堂| 一区二区三区www| 精品高清一区二区三区| 国产精品夜间视频香蕉| 欧美另类第一页| 欧美激情精品在线| 国产免费一区二区三区香蕉精| 亚洲男人天堂手机在线| 九色精品免费永久在线| 97久久久免费福利网址| 国产精品网红直播| 国产视频在线一区二区| 精品久久久久久久大神国产| 久久精品国产成人| 成人精品网站在线观看| 欧美日韩在线视频一区| 欧美日韩视频免费播放| 日本国产欧美一区二区三区| 日本sm极度另类视频| 亚洲男女性事视频| 亚洲激情视频网站| 精品视频久久久久久久| 欧美激情网友自拍| 日韩精品在线观看一区二区| 77777少妇光屁股久久一区| 国产精品旅馆在线| 136fldh精品导航福利| 久久久久久九九九| 日韩精品中文字幕有码专区| 色综合亚洲精品激情狠狠| 日本免费一区二区三区视频观看| 亚洲bt天天射| 欧美日韩国产页| 亚洲欧美中文日韩v在线观看| 欧美激情视频三区| 欧美激情一区二区三区久久久| 成人动漫网站在线观看| 亚洲视频精品在线| 国产激情综合五月久久| 亚洲精品美女视频| 久久视频免费观看| 中文字幕亚洲欧美日韩2019| 亚洲成人三级在线| 日韩黄色在线免费观看| 日本高清+成人网在线观看| 国产一区二区丝袜| 国产中文日韩欧美| 欧美大片免费观看| 日韩电影中文 亚洲精品乱码| 97精品久久久| 色婷婷久久一区二区| 久久夜精品va视频免费观看| 久久久久久com| 国产精品扒开腿做爽爽爽视频| 国产欧美最新羞羞视频在线观看| 久久精品视频99| 欧美国产中文字幕| 成人国产精品免费视频| 久久久99免费视频| 欧美国产日韩免费| 国产日韩欧美在线观看| 91精品视频免费看| 久久久亚洲国产天美传媒修理工| 亚洲精品久久久一区二区三区| 正在播放国产一区| 亚洲黄色av女优在线观看| 亚洲国产古装精品网站| 亚洲第一福利在线观看| 国产成人一区二区三区小说| 北条麻妃一区二区三区中文字幕| 国产精品久久久久aaaa九色| 亚洲国产精品99| 九色精品美女在线| 国产一区二区三区在线观看网站| 欧美自拍视频在线观看| 国产成人高潮免费观看精品| 日韩中文娱乐网| 亚洲国产日韩精品在线| 精品日韩视频在线观看| 亚洲色图18p| 久久亚洲国产精品成人av秋霞| 成人做爰www免费看视频网站| 深夜精品寂寞黄网站在线观看| 日韩在线观看视频免费| 精品美女久久久久久免费| 欧美中文字幕在线视频| 91精品视频免费看| 欧美激情xxxxx| 亚洲精品中文字幕有码专区| 亚洲图片在线综合| 国产欧美日韩免费| 2019中文字幕在线免费观看| 狠狠躁18三区二区一区| 青青草成人在线| 国产精品对白刺激| 欧美日本啪啪无遮挡网站| 亚洲欧洲日产国码av系列天堂| 国产精品入口免费视| 欧美在线xxx| 91精品国产高清自在线| 日韩黄色av网站| 91欧美激情另类亚洲| 欧美裸体视频网站| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲一区二区精品| 最新69国产成人精品视频免费| 日韩精品免费在线播放| 久久综合久久美利坚合众国| 欧美野外猛男的大粗鳮| 亚洲激情国产精品| 国产香蕉97碰碰久久人人| 黑人极品videos精品欧美裸| 91精品久久久久久久久久入口| 久久精品视频va| 国产高清在线不卡| 欧美日韩亚洲国产一区| 97免费中文视频在线观看| 欧美精品videossex88| 2018日韩中文字幕| 97在线视频免费播放| 成人97在线观看视频| 这里只有精品视频在线| 亚洲成色777777在线观看影院| 自拍视频国产精品| 孩xxxx性bbbb欧美| 视频一区视频二区国产精品| 国产精品黄页免费高清在线观看| 51久久精品夜色国产麻豆| 一区二区国产精品视频| 欧美激情第99页| 日韩亚洲综合在线| 中文字幕日韩在线观看| 亚洲国产精品小视频| 亚洲第一色中文字幕| 国产精品欧美在线| 国语自产偷拍精品视频偷| 国产99久久精品一区二区永久免费| 色99之美女主播在线视频| 国产一区二区三区免费视频|