node express 单、多文件上传,以及七牛云上传

简单点,代码明确直接上

配置代码

config.js


const qiniu = require('qiniu')
// 创建上传凭证
const accessKey = 'xxxx'    //七牛的accessKey
const secretKey = 'xxxx'    //七牛的secretKey
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey)
const options = {
    scope: 'sutengjie',
    returnBody: `{"key":"$(key)","size":$(fsize),"name":"$(fname)","type":"$(mimeType)"}`
}
const putPolicy = new qiniu.rs.PutPolicy(options)
const uploadToken = putPolicy.uploadToken(mac)
const keyInQiniuCloud = 'image/' //七牛云文件目录
//服务器直传
const config = new qiniu.conf.Config();
config.zone = qiniu.zone.Zone_z2;//区域
// 是否使用https域名
//config.useHttpsDomain = true;
// 上传是否使用cdn加速
//config.useCdnDomain = true;

//图片的地址
var bucketManager = new qiniu.rs.BucketManager(mac, config);
var privateBucketDomain = 'xxxxx.com/'; //七牛中自己配置的域名地址
var deadline = parseInt(Date.now() / 1000) + 3600000; // 永不过期

const getFileUrl=(key)=> {
    // return bucketManager.privateDownloadUrl(privateBucketDomain, key); //公开空间
    return bucketManager.privateDownloadUrl(privateBucketDomain, key, deadline); //私有空间
}
module.exports = {
    uploadToken,
    config,
    getFileUrl,
    keyInQiniuCloud,
    privateBucketDomain,
    jwtSecretKey: 'sutengjie'
}

直接上代码

var express = require('express');
var router = express.Router();
const fs = require('fs')
const multer = require("multer");
// 引入七牛模块
const qiniu = require('qiniu')
const qnconfig = require('../config')
var upload = multer({ dest: "uploads/" }); //本地服务文件夹

//单文件
router.post("/upload", upload.single("file"), (req, res, next) => {
    var fileObj = req.file;
    uploadFile(fileObj,(respBody)=>{
        if (respBody.url){
            res.status(200).json({
                code: "200",
                data: respBody,
                // data: qnconfig.getFileUrl(respBody.key),
                msg: "上传成功",
            });
        }else{
            res.status(respInfo.statusCode).json({ code: "400", msg: "上传失败" });
        }
    })
});
//多文件
router.post("/files", upload.array("file"), (req, res, next) => {
    var fileObj = req.files;
    var actions = [];
    for (var i =0;i<fileObj.length; i++){
        var action = () =>{
            return new Promise(resolve => {
                uploadFile(fileObj[i], function(respBody) {
                    resolve(respBody);
                });
            })
        }
        actions.push(action());  // 将每次循环调用的方法添加到方法数组中
    }
    Promise.all(actions).then((resolve)=>{
        res.status(200).json({
            code: "200",
            data: resolve,
            msg: "上传成功",
        });
    })
});

// 上传函数
function uploadFile(fileObj, callback) {
    var formUploader = new qiniu.form_up.FormUploader(qnconfig.config);
    var putExtra = new qiniu.form_up.PutExtra();
    // 七牛云上的保存位置、本地服务文件的路径
        formUploader.putFile(qnconfig.uploadToken,qnconfig.keyInQiniuCloud + fileObj.originalname,fileObj.path,putExtra,function (respErr, respBody, respInfo) {
                if (respErr) throw respErr;
                respBody.url = qnconfig.privateBucketDomain + qnconfig.keyInQiniuCloud + fileObj.originalname
                respBody.name = fileObj.originalname
                fs.unlinkSync(fileObj.path) //删除服务本地文件
                if (respInfo.statusCode == 200) {
                    callback(respBody)
                } else {
                    callback({ code: "400", msg: "上传失败" })
                }
            }
        );
}
module.exports = router;

七牛云有什么不懂,建议直接看文档   Node.js SDK V6_SDK 下载_对象存储 - 七牛开发者中心

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值