一、七牛云配置

七牛官网

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.secretKeyconst 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.zone2const localFile = filePathconst 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();

七牛云配置 koa 上传文件到七牛云相关推荐

  1. Go语言实战-通过gin上传文件到七牛云OSS

    上传到文件到七牛云的两种上传方式: 1. 客户端上传到服务器,服务器再上传到七牛云 2.客户端直接通过ajax上传到七牛云 前者:需要上传到服务器,这个过程需要消耗不少带宽,也给服务器带来不小压力,但 ...

  2. 前端通过ajax上传文件到七牛云

    1. 从服务端获取七牛云上传的token,生成token参考官方文档https://developer.qiniu.com/kodo/1208/upload-token 2. 在七牛云文档查找上传的存 ...

  3. 关于前端上传文件到七牛云的一些笔记

    关于前端上传文件到七牛云的一些心得 前言 申请账户 具体步骤 算了 小技巧 七牛云没有监控上传进度和上传错误的 API ?(JS SDK) React 更新 state 中的数组不能触发动画效果? 前 ...

  4. Qt——记录:http表单格式上传文件到七牛云和阿里云

    环境:windows10 版本:Qt 5.15.2 工具:Qt Creator 背景:通过http表单格式上传文件,兼容阿里云和七牛云. 一.记录问题:上传文件到阿里云 问题1:ErrorCode: ...

  5. elementui 上传七牛_element ui使用上传组件上传文件到七牛(qiniu-js)

    博主正在重构博客中,刚开始时静态资源都是上传到本地服务器的,但这个项目博主最后打算真正上线运营的.索性就改进了下,把静态资源尽量放到云存储中,方便后续开发.这里把方法和遇到坑给记录下. 1.使用前提注 ...

  6. nodejs的express实现上传文件到七牛

    本文实现上传文件到七牛,动态切换上传空间,MD5设置key值,点击复制七牛返回的链接. 在七牛中注册开发者,获取key 七牛官网--管理控制台(偏右上角)--个人中心(获取秘钥)--对象存储,新建存储 ...

  7. php大图片接口上传慢,七牛php sdk上传文件太慢

    问题描述 上传同一个文件(32kb)有时候需要2s,但有时候需要11s,上传速度太不稳定,且太慢. 上传的过程是由前端上传文件到后端php(使用yii2框架)的接口,由php调qiniu的sdk上传方 ...

  8. mac上传文件到七牛云,使用qshell上传文件到七牛云

    第一步:下载qshell(其实就是命令行,不是什么直接能打开的文件,也不是exe文件) 地址:https://developer.qiniu.com/kodo/tools/1302/qshell 选择 ...

  9. 七牛云 php 服务器,七牛云3:通过业务服务器上传文件到七牛云

    前面2篇,我们介绍了七牛云的客户端文件直传,客户端直传存在一个问题,就是上传凭证token在前端是暴露的,因此考虑采取通过业务服务器(自己家的服务器)代为上传文件. 整个上传流程用户在前端选择要上传的 ...

最新文章

  1. 修改文件vim 插件:perl-support的修改和使用
  2. 解决spring-boot-maven-plugin not found爆红
  3. Android被逼学习例子2
  4. win7下反汇编程序程序基址改变问题
  5. 2019编译ffepeg vs_如何在windows10下使用vs2017编译最新版本的FFmpeg和ffplay
  6. CF 1475 D. Cleaning the Phone 思维模型
  7. Android 系统性能优化(39)---Android内存优化之三:打开MAT中的Bitmap原图
  8. 【Python-2.7】切片
  9. 数据结构笔记(二十七)-- 图的深度优先遍历
  10. oracle数据库修改连接数
  11. NGINX配置之二: nginx location proxy_pass 后面的url 加与不加/的区别.
  12. 基础设置---python库--matplotlib
  13. 跨界合作成潮流 智能家居竞争升级
  14. 公司网络上网慢排查项
  15. 10dayC语言项目 《后宫选妃》
  16. QFile读取移动硬盘文件卡死问题
  17. Candence学习篇(5)使用Padstack Editor制作贴片焊盘和通孔焊盘
  18. 我为什么花 1 万多买 MacBook Pro,重点是推荐我常用的开发写作相关的工具
  19. C语言 | 求奇偶数个数
  20. java zxing条形码去掉两边空白,密度调整,固定条形码宽度

热门文章

  1. ycmj.php,祝CSDN的朋友们2014元旦快乐,肯定高手帮小弟我解密个文件,PHP加密的,搞了半天没搞明白。 求高手...
  2. Oracle表的分区update卡着,分区表分区字段的update操作
  3. 【C++】题目:输入三个整数x,y,z,请把这三个数由小到大输出。
  4. 喜报销发布V2.6.1,领导审批可选择“加签”人,已审批单据可“作废”
  5. 人工智能应用(二):从“估车价”看机器学习
  6. iphone7运行linux,老外继续折腾iPhone 7,成功运行Linux
  7. MATLAB 寻找离散点拐点
  8. 89年的测试员,什么也不会敢要15K,看着他的简历我思绪万千...
  9. 【Spring】之 SpringAOP 切点指示符详解
  10. 我是如何实现鸿蒙系统编译、烧录不跨平台的?