Express图片上传至七牛云

1,018 阅读1分钟

Express图片上传至七牛云

依赖

npm install qiniu -S

npm install formidable-S

上传代码

const express = require('express');

const Routers = express.Router();

var path = require('path')
const fs = require('fs')
//获取图片等文件
var formidable = require('formidable');

//时间处理插件
const moment = require('moment');

//七牛云配置
const qiniu = require('qiniu')

const accessKey = '***********'  //AK  详见个人中心 秘钥管理
const secretKey = '**********'   //SK  详见个人中心 秘钥管理
const bucket = '*****'  //上传的空间名称

/ 七牛云 上传
Routers.post('/upload', (req,res) => {
    let form = new formidable.IncomingForm();
        form.parse(req, function (err, fields, filesa){

               	let MathRoundNumber = Math.round(Math.random()*100000)
                 let MathRound = moment().format("YYYY_MM_DD_hh_mm_ss")
		//个人喜好,在上传的文件名前面加上日期,用于区分时间,也有利于排序
                let key = MathRound+MathRoundNumber+filesa.file.type 
		 //上传后的文件名

                let  path= filesa.file.path


               let mac = new qiniu.auth.digest.Mac(accessKey,secretKey)
               let options = {
                    scope: bucket,
                    expires: 3600 * 24
               }

                let putPolicy = new qiniu.rs.PutPolicy(options)
                let uploadToken = putPolicy.uploadToken(mac)

                uploadFile(uploadToken, key, path).then(idea=>{
                    res.json({
                        code: 0,
                        msg: '上传成功',
                        data:{
                            url: "http://img.abcdf.top/"+idea.key  //这里要拼接上 你的域名,请在七牛云添加并在域名服务商哪里解析
                        }
                    })
                })
                .catch(err=>{
                    //其实这种情况 也上传了图片,为了严禁起见
                    res.json({
                        code: 4,
                        msg: '上传失败',
                        data:{
                             url: "http://img.abcdf.top/"+err.key  //这里要拼接上 你的域名,请在七牛云添加并在域名服务商哪里解析
                        }
                    })
                })

             
            //构造上传函数
              async  function uploadFile(uptoken, key, localFile) {
             
                     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();
                    return  new Promise((resolve,reject)=>{
                        // 文件上传
                            formUploader.putFile(uptoken, key, localFile, putExtra, function(respErr,
                              respBody, respInfo) {
                              if (respErr) {
                                throw respErr;
                              }
                              if (respInfo.statusCode == 200) {
                                resolve(respBody)
                              } else {
                                reject(respBody)  
				//其实这种情况 也上传了图片,为了严禁起见
                              }
                            })
                     })
                    
                }  
           
        })
})