欢迎访问自动发外链网站,大量seo自动发布外链工具与案例

node实现上传文件(视频、图片、音乐)到七牛云存储。

作者:jcmp      发布时间:2021-04-11      浏览量:0
需求:node实现上传文件(视频、图片、

需求:node实现上传文件(视频、图片、音乐)到七牛云存储。 需要用到的模块 cnpm install qiniu --save cnpm install formidable --save 确保安装成功后。

1. 在项目内新建一个 qiniuConfig.js 文件,内容如下: let config = {}; config.accessKey = 'dfFiJxxxxxxxxxxxxxxxxxxFxK72'; //七牛的AK config.secretKey = 'Q1XfZHxxxxxxxxxxxxxxxcG-1_VqWA'; //七牛的SK config.bucket = 'videoplan1'; //存储空间的名字 config.url = 'q8hx07sxxxxxlouddn.com'; //配置的域名,我直接用的他自己生成的 module.exports = config;2. 然后在项目内在建一个 qiuniu.js ,文件内容如下,可直接复制使用,注意文件引入的路径: let qiniu = require('qiniu'); let formidable = require('formidable'); let configs = require('../config/qiniuConfig'); let qn = {}; //要上传的空间 let bucket = configs.bucket; //七牛云存储的存储空间名 //构建上传策略函数 (获取七牛上传token) qn.uptoken = function (bucket) { var putPolicy = new qiniu.rs.PutPolicy({ scope: bucket }); var accessKey = configs.accessKey; var secretKey = configs.secretKey; var mac = new qiniu.auth.digest.Mac(accessKey, secretKey); var uploadToken = putPolicy.uploadToken(mac); return uploadToken; } qn.upImg = function (req, callback) { let callbackObj = {}; //回调函数返回的对象 var 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); //上传到七牛后保存的文件名 let key = new Date().getTime(); //生成上传 Token let token = qn.uptoken(bucket); //要上传文件的本地路径 let filePath = files.file.path; //如果是表单的数据提交会存储在fields中,图片文件提交会存储在files中 files.file中的file指的是前端设定input的name一般设置为file //构造上传函数 // 文件上传(以下四行代码都是七牛上传文件的配置设置) var config = new qiniu.conf.Config(); config.zone = qiniu.zone.Zone_z0; //设置传输机房的位置根据自己的设置选择 var formUploader = new qiniu.form_up.FormUploader(config); var 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填写自己在七牛中设置的自定义域名 var response = { "url": 'http://' + configs.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;3. 在然后在新建一个upload.js ,内容如下: var express = require('express'); //引入express var router = express.Router(); //定义路由级中间件 let qn = require('./qiniu'); //结果包装函数 let result = function (obj, bool) { if (bool) { return { status: 0, data: obj }; } else { return { status: 1, data: obj }; } } //上传接口 router.post("/upImg", function (req, routerRes) { qn.upImg(req, function (res) { // console.log('res', res); if (res.status == 0) { routerRes.json(result(res.data, true)); } else { routerRes.json(result(res.msg, false)); } }); }) module.exports = router;4. 最后别忘记在app.js引入 var upload = require("./routes/upload"); app.use('/api',upload)5. 所以我的接口是 `http://localhost:5000/api/upImg` 返回的结果是这样的 ![image.png](https://upload-images.jianshu.io/upload_images/14379901-dab517962a149f52.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 七牛云后台是这样的: ![image.png](https://upload-images.jianshu.io/upload_images/14379901-e99e6a64e8e2184a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)6. 学习交流➕v 1115009958 备注;前端学习交流。