node 后端上传
插件安装
首先要安装所需的插件qiniu和formidable

1
2
npm i qiniu --save
npm i formidable --save

配置文件

1
2
3
4
5
6
const config = {};
config.accessKey = 'xxx'; //七牛云Ak密匙
config.secretKey = 'xxx'; //七牛云Sk密匙
config.bucket = 'xxx'; //存储空间的名字
config.url = 'xxx'; //配置的域名
module.exports = config;

  


封装上传七牛云方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
const qiniu = require('qiniu');
const formidable = require('formidable');
const fs = require('fs');
const config = require('./config.js');
 
const qn = {};
 
//要上传的空间
const bucket = config.bucket; //七牛云存储的存储空间名
 
//构建上传策略函数 (获取七牛上传token)
qn.uptoken = function(bucket) {
const putPolicy = new qiniu.rs.PutPolicy({ scope: bucket });
const accessKey = config.accessKey;
const secretKey = config.secretKey;
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
const uploadToken=putPolicy.uploadToken(mac);
return uploadToken;
}
 
qn.upImg = function(req,callback){
const callbackObj = {}; //回调函数返回的对象
const form = new formidable.IncomingForm(); //创建上传表单
form.encoding = 'utf-8';
//form.uploadDir = '../../uploadimg'; //设置上传目录 设置则会存储在中控服务器,不设置则建立一个临时文件 最后要上传到七牛,所以不用设置
form.keepExtensions = true; //保留后缀
form.maxFieldsSize = 5 * 1024 * 1024; //文件大小5M 报错413上传文件太大了
form.parse(req, function(err, fields, files) {
if (err) {
// res.locals.error = err;
callbackObj.status = 1;
callbackObj.msg = err;
console.log('err==',err);
return callback(callbackObj);
}
console.log(files.file.path);
//上传到七牛后保存的文件名
const key = new Date().getTime();
//生成上传 Token
const token = qn.uptoken(bucket);
//要上传文件的本地路径
const filePath = files.file.path; //如果是表单的数据提交会存储在fields中,图片文件提交会存储在files中 files.file中的file指的是前端设定input的name一般设置为file
 
//构造上传函数
// 文件上传(以下四行代码都是七牛上传文件的配置设置)
const config = new qiniu.conf.Config();
config.zone = qiniu.zone.Zone_z0; //设置传输机房的位置根据自己的设置选择
const formUploader = new qiniu.form_up.FormUploader(config);
const putExtra = new qiniu.form_up.PutExtra();
formUploader.putFile(token, key, filePath, putExtra, function(respErr,respBody, respInfo) {
if (respErr) {
callbackObj.status = 1;
callbackObj.msg = respErr;
return callback(callbackObj);
}
if (respInfo.statusCode == 200) {//上传成功
console.log(respBody);
// 输出 JSON 格式 xxx填写自己在七牛中设置的自定义域名
const response = {
"url":config.url+key
};
console.log(response);
// res.end(JSON.stringify(response));
callbackObj.status = 0;
callbackObj.data = response;
return callback(callbackObj);
} else {//上传失败
console.log(respInfo.statusCode);
console.log(respBody);
callbackObj.status = 1;
callbackObj.msg = respBody;
return callback(callbackObj);
}
});
});
}
 
// console.log(qn.uptoken(bucket));
 
module.exports = qn;

 

在路由中调用

const qn = require('./qiniu'); //导入七牛文件 上方组件文件我命名qiniu.js
//上传图片

1
2
3
4
5
6
7
8
9
10
11
app.post("/upImg",function(req,res){
const promise = new Promise(resolve => {
qn.upImg(req,function(resData) {
resolve(resData)
})
}).catch(err=>{
throw err //抛出错误
})
const data = promise
res.send(data)
})

  


前端调用
input框调用方法

1
2
3
4
5
6
7
<!--from文件上传一定要添加enctype = 'multipart/form-data' name也需要赋值-->
<form class="form-signin" role="form" method="post" enctype='multipart/form-data' action="http://127.0.0.1:8090/upImg">
<h2 class="form-signin-heading">上传文件</h2>
<input id="fulAvatar" name="file" type="file" class="form-control" />
<br/>
<button id="btnSub" class="btn btn-lg btn-primary" type="submit">上 传</button>
</form>

  

element-ui使用方法

1
2
3
4
5
6
7
<el-upload
class="upload-demo"
action="http://127.0.0.1:8090/upImg"
multiple>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>

 

posted on   ygunoil  阅读(536)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2019-12-31 JS 统计一个字符串中出现次数最多字母
2019-12-31 JS二分法查找
2019-12-31 Promise.all的实现
2019-12-31 如何让(a==1&&a==2&&a==3)成立
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示