七牛云配置 && koa 上传文件到七牛云

一、七牛云配置

七牛官网

1、创建七牛存储空间

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2、空间添加备案的域名 (若是测试空间可不需要配置)

在这里插入图片描述
在这里插入图片描述

3、解析CNAME

添加域名后会有CNAME(别名记录),需要将它解析到你的备案域名下
链接-CNAME 解析到备案域名 官网
在这里插入图片描述
在这里插入图片描述

1)在哪里购买的域名就购买域名的厂商相应管理控制台,添加域名解析。

tip:
在域名厂商的控制台中,找到您的域名解析添加页面,例如:
a. 阿里云:在控制台页面的左侧,产品与服务栏中选择 域名。
b. 腾讯云:在控制台的云产品中,搜索并选择 云解析。
c. DNSPOD:在控制台页面左侧,选择 域名。
阿里云 官网

a)进入域名官网找到对应的域名

在这里插入图片描述

在这里插入图片描述

b)添加CNAME记录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

tip: 不同类型域名的主机记录值
常见的普通域名主机记录填写方式举例:
创建的加速域名 域名类型 主机记录
qiniu.com 普通域名 @
www.qiniu.com 普通域名 www
cdn.qiniu.com 普通域名 cdn
video.cdn.qiniu.com 普通域名 video.cdn

常见的泛域名主机记录填写方式举例:
创建的加速域名 域名类型 主机记录
.qiniu.com 泛域名 *
.cdn.qiniu.com 泛域名 *.cdn

c)查看是否正确配置

(若没有正确配置 CNAME 解析,是无法正常访问资源外链的)
1)linux/mac系统您可以通过如图所示的命令 dig 您的加速域名 查看,第一条是否解析到您配置的CNAME值。
在这里插入图片描述

2)windows系统可以通过Win+R 或 点击左下角的“开始”按钮打开“开始”菜单,打开“运行”,输入cmd回车。
在命令行模式下输入nslookup 您的加速域名,例如 nslookup qn.vinchi.club,在结果中可以看到您复制的cname值即可。
在这里插入图片描述
在这里插入图片描述

4、添加文件访问域名 (就是已经备案好七牛空间已添加的域名)

在这里插入图片描述
在这里插入图片描述

绑定成功后,在文件管理中即可查看选择
在这里插入图片描述

可查看上传文件信息

在这里插入图片描述

5、测试空间不需要配置域名即可使用(但是是有期限的)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、koa 上传文件到七牛云

1、获取七牛配置信息

七牛官网
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  # qiniuConfig.js 文件

let QINIU  = {};
QINIU.accessKey = 'XXXXX'; //七牛的accessKey
QINIU.secretKey = 'XXXXX'; //七牛的secretKey
QINIU.bucket = 'menglove-qn';  //存储空间的名字
QINIU.origin = 'menglove.xyz';  //配置的域名
module.exports = QINIU;

2、安装

$ npm install --save koa-qiniu 

3、上传的文件处理(upload.js 【service 模块】)

const uuid = require('uuid');
const fs = require('fs');
const qiniu = require('qiniu'); // 需要加载qiniu模块的
const qiniuConfig = require('../.././config/qiniuConfig');  // 七牛的配置信息

class uploadService {
    uploadToQiniu(filePath, key) {
         const accessKey = qiniuConfig.accessKey 
         const secretKey = qiniuConfig.secretKey
         const mac = new qiniu.auth.digest.Mac(accessKey, secretKey)
         const options = {
             scope: qiniuConfig.bucket
         }
         const putPolicy = new qiniu.rs.PutPolicy(options);
         const uploadToken = putPolicy.uploadToken(mac);
         // zone 华东机房  zone1 华北机房  zone2 华南机房   zoneNa0 北美
         const config = new qiniu.conf.Config()
         config.zone = qiniu.zone.zone2
         
         const localFile = filePath
         const formUploader = new qiniu.form_up.FormUploader(config)
         const putExtra = new qiniu.form_up.PutExtra()
         // 文件上传
         return new Promise((resolved, reject) => {
             formUploader.putStream(uploadToken, key, localFile, putExtra, function (respErr, respBody, respInfo) {
                 if (respErr) {
                     reject(respErr)
                 } else {
                    //  返回的是key:文件名和hash:文件信息
                    // "hash": "XXX",
                    // "key": "public/b59b7a70-d686-11ec-bed9-1fde74428146.jpg"
                     resolved(respBody)
                 }
             })
         })
    }
}

module.exports = new uploadService();

4、上传文件时对文件信息处理 ( upload.js 【controller 模块】)

const uuid = require('uuid');
const fs = require('fs');
const { uploadToQiniu } = require('../service/upload');  // 七牛上传文件处理
const qiniuConfig = require('../.././config/qiniuConfig'); // 七牛的配置信息
const { responseSuccess,responseFail } = require('./response');  // 返回处理的封装

class UploadController {
    async upload(ctx) {
        let params = ctx.request.body; // 获取formData文本信息
        let files = ctx.request.files; // 获取formData文件信息
        if(files){
            const file = files.file; // 获取formData文件信息
            // 文件名
            const fileName = uuid.v1();
            // 创建文件可读流
            const reader = fs.createReadStream(file.filepath);
            // 获取上传文件扩展名
            const ext = file.originalFilename.split(".").pop();
            // 命名文件以及拓展名
            const fileUrl = `public/${fileName}.${ext}`;
            //  上传文件到七牛并返回七牛文件目录
            const result = await uploadToQiniu(reader, fileUrl);
            if(result){
                let imageUrl = `http:${qiniuConfig.origin}/${result.key}`; // 获取上传文件 使用 (七牛配置域名+imgUrl)
                let data = { imageUrl }
                ctx.body = responseSuccess(data,'上传成功');
            }else{
                ctx.body = responseFail('上传失败');
            }
        }else{
            ctx.body = responseFail('请选择图片');
        } 
    }
}

module.exports = new UploadController();

5、路由 (router 模块)

const Router = require('koa-router')
const {
    upload,
} = require('../controller/upload');

let router = new Router()

// 上传图片
/**
 * @swagger
 * /uploadImg:
 *   post:
 *     description: 图片上传
 *     tags: [图片上传]
 *     produces:
 *       - application/json
 *     parameters:
 *       - name: file
 *         description: 图片文件.
 *         in: formData
 *         required: true
 *         type: file
 *     responses:
 *       200:
 *         description: 上传成功
 *         schema:
 *           type: object
 *           $ref: '#/definitions/uploadImg'
 *   
 */
 
 /**
 * @swagger
 * definitions:
 *   uploadImg:
 *     properties:
 *       data:
 *         type: object
 *         properties:
 *            imageUrl:
 *              type: string
 *              example: 'http://menglove.xyz/public/0f304580-d5c8-11ec-aebd-3f21817ff8d1.jpg' 
 *              description: 图片地址  (menglove.xyz为七牛域名)
 * 
 */

router.post('/uploadImg', upload)

module.exports = router

6、返回状态封装(controller 文件 response文件夹的index.js)

class ResponseController {
    // 成功返回
    responseSuccess (data,msg){
      return {
        code: 200,
        message: msg || '获取成功',
        data: data || null
       }
    }
    // 失败返回
    responseFail (msg){
        let message = msg || '获取失败';
            return {
                code: 500,
                message
            }
    }
}

module.exports = new ResponseController();
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
首先,你需要在你的 Vue 项目中安装 `qiniu-js` 包,这个包可以帮助你将文件上传到七牛云。 安装命令:`npm install qiniu-js` 然后,在你的 Vue 组件中引入 `qiniu-js` 包,代码如下: ``` import * as qiniu from 'qiniu-js' ``` 接下来,我们需要实现异步上传文件七牛云的功能。假设我们已经有一个上传文件的方法 `handleUpload`,代码如下: ``` handleUpload(file) { const token = 'your-qiniu-upload-token' // 替换成你的七牛云上传凭证 const key = file.name // 文件名作为七牛云存储的文件名 const config = { useCdnDomain: true, // 是否使用七牛云的 CDN 域名 } const putExtra = { fname: file.name, // 文件原始名字 params: {}, // 上传额外参数 mimeType: null // 上传文件类型 } const observable = qiniu.upload(file, key, token, putExtra, config) const observer = { next(res) { // 上传进度回调 console.log(res.total.percent) }, error(err) { // 上传失败回调 console.log(err) }, complete(res) { // 上传成功回调 console.log(res) } } const subscription = observable.subscribe(observer) // 执行上传操作 } ``` 在上面的代码中,我们通过 `qiniu.upload` 方法来执行文件上传操作,参数依次为: - `file`: 要上传的文件对象 - `key`: 上传到七牛云后的文件名 - `token`: 七牛云上传凭证 - `putExtra`: 上传额外参数,包括文件名、上传参数和文件类型 - `config`: 上传配置,包括是否使用七牛云的 CDN 域名 在上传过程中,我们通过观察者模式来监听上传进度、上传成功和上传失败事件,并执行相应的回调函数。 最后,你可以在你的组件中调用 `handleUpload` 方法来上传文件,例如: ``` <el-upload action="" :before-upload="handleUpload" > <el-button type="primary">点击上传</el-button> </el-upload> ``` 在上面的代码中,我们使用了 Element UI 的上传组件,并将 `before-upload` 属性设置为 `handleUpload` 方法,这样就可以触发文件上传操作了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值