express删除服务器文件,又拍云 Node.js 实现文件上传、删除

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 实现签名认证

const crypto = require("crypto");

// MD5

function MD5(value) {

return crypto

.createHash("md5")

.update(value)

.digest("hex");

}

// Base64

function base64(value) {

return Buffer.from(value).toString("base64");

}

// hmacsha1

function 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/'

// Upload

app.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

}

});

});

// Delete

app.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/cors

app.use(cors());

前端

前端使用 Vue.js 实现

引入 Bootstrap.css

UPYun Upload & Delete

Upload

  • {{item}} Del

引入 Vue.js、Axios

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))

});

}

项目源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Node.jsExpress框架实现语言切换的服务器端代码示例: ```javascript const express = require('express'); const app = express(); // 设置默认语言为英语 app.locals.lang = 'en'; // 处理语言切换请求 app.get('/lang/:lang', (req, res) => { const lang = req.params.lang; // 根据语言设置本地变量 if (lang === 'en' || lang === 'zh') { app.locals.lang = lang; } // 返回确认消息 res.send(`Language set to ${lang}`); }); // 返回本地化文本 app.get('/hello', (req, res) => { // 根据本地变量返回不同的文本 const greeting = app.locals.lang === 'zh' ? '你好' : 'Hello'; res.send(`${greeting}, World!`); }); // 监听端口 app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 在上面的示例中,我们首先设置了默认语言为英语(`en`)。然后,我们定义了一个路由来处理语言切换请求。在这个路由中,我们从URL参数中获取要切换的语言,然后根据语言设置本地变量。最后,我们向客户端返回确认消息。 接下来,我们定义了一个路由来返回本地化的文本。在这个路由中,我们根据本地变量返回不同的问候语,并将其与“World!”组合起来。 最后,我们启动服务器并监听端口3000。您可以使用浏览器或其他HTTP客户端向服务器发送语言切换请求(例如`http://localhost:3000/lang/zh`),然后访问`http://localhost:3000/hello`来获取本地化的问候语。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值