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

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 12:37:40
字體:
來源:轉載
供稿:網友

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" ><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 實現文件上傳、刪除,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陈巴尔虎旗| 九龙城区| 连城县| 巧家县| 靖边县| 思茅市| 无极县| 邻水| 当阳市| 富锦市| 正阳县| 鄯善县| 嘉禾县| 娱乐| 丹巴县| 江安县| 九台市| 武邑县| 普定县| 沧州市| 卢氏县| 苗栗县| 沭阳县| 和政县| 黄浦区| 丹巴县| 千阳县| 榆中县| 鄢陵县| 平泉县| 西安市| 祥云县| 翁源县| 宜兴市| 南和县| 齐河县| 通渭县| 淮北市| 得荣县| 汝南县| 海宁市|