一、七牛云配置

七牛官网

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. hive2.3.2安装使用
  2. 微服务是否使SOA变得无关紧要?
  3. 《shop》 --- 商品图片上传功能
  4. eclipse中不能找到dubbo.xsd解决方法
  5. 2020年美团春招 技术综合试卷第一题
  6. mongodb实现对某列求和SUM
  7. 逛街 最短距离+花费
  8. 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现
  9. RedHat宣布支持Azure、.Net Core 2.0和SQL Server 2017
  10. r语言集合补集_【高中数学必修1研读】之一“第一章 集合与函数概念”
  11. 浪潮信息边缘服务器m5多少钱,浪潮边缘计算服务器NE5260M5发布!最高性能可达每秒70万亿次...
  12. random_state 参数
  13. ecshop根目录调用_ecshop调用指定商品分类下的商品
  14. 外网访问内网Tornado
  15. Python3.6下安装爬虫scrapy框架的安装步骤以及遇到的诸多问题
  16. mysql dbf导入数据库_MySQL数据库如何导入dbf格式数据?
  17. Unable to negotiate with port 51732: no matching host key type found. Their offer:
  18. HTML2CANVAS 合成图片
  19. Exchange的邮箱创建与使用
  20. Android震动vibrator(马达)--系统到驱动的流程【转】

热门文章

  1. 《支付系统-收银台设计》
  2. 谷歌浏览器截图_6款神仙插件,让浏览器效率提升200%!
  3. 2020年北邮计算机专业分数线,2020北京邮电大学研究生分数线汇总(含2018-2019历年复试)...
  4. 生活妙招:灭蟑螂方法
  5. Mac-Web服务器映射外网-ngrok
  6. Linux系统中“动态库”和“静态库”那点事儿【转】
  7. 使用Altium Designer软件绘制一个stm32最小系统的电路原理图
  8. HDU1007(Quoit Design)
  9. App错误日志记录到本地
  10. 深入理解依赖倒置原则(Dependence Inversion Principle)