1. 七牛云OSS配置
1.1. 创建存储空间
- 存储空间名称:自定义
- 存储区域:与服务器在同一区域即可,保证网络通畅
- 访问空间:
公开空间谁都可以访问,私有空间需要身份认证才能访问。如果作为图片服务器,谁都能看,就选择公开空间
2. 七牛云图片上传实现原理
2.1. 资源路径说明
七牛云通过存储空间名+文件key来唯一定位一个资源。
常用的key有几种形式:
- UUID
- 原始文件名(非中文)
- 自定义的具有唯一性的字符串
key由用户上传时决定
上传之后,资源的URL路径为 http://外链域名/key
2.2. 上传原理
七牛云图片上传分为两步
- 用账号的AccessKey和SecretKey连接七牛服务器进行身份校验,成功则得到token
- 用token就可以上传资源
2.3. 上传实现方式
实现上传有几种思路:
- 纯后端实现:前端将图片上传到后端,再由后端将图片上传到七牛云
- 纯前端实现:前端直接将图片上传到七牛云
- 前后端结合:后端提供获取token的接口,前端获取token之后,再根据token直接将图片上传到七牛云
纯后端实现,安全,但是服务器压力大。纯前端实现,前端要知道AccessKey和SecretKey,又不安全。
前后端结合的方式是最佳的。前端不需要知道AccessKey和SecretKey是什么,只需要访问后端接口,由后端去获取token,再将token返回给前端,最后由前端上传图片。这样既安全又高效
2.4. HTTP上传(表单上传)接口
前端通过HTTP接口上传,具体文档可以查询 七云开发者OSS文档->上传资源->表单上传 https://developer.qiniu.com/kodo/manual/1272/form-upload
HTML表单示例
1 | <form method="post" action="http://upload.qiniup.com/" |
上传时的参数如下
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| action | string | 是 | 上传地址,可参考存储区域 |
| resource_key | string | 否 | 资源名,必须是 UTF-8 编码。注意: 如果上传凭证中 scope 指定为 |
| custom_name | string | 否 | 自定义变量的名字,不限个数。 |
| custom_value | string | 否 | 自定义变量的值。 |
| upload_token | string | 是 | 必须是一个符合相应规格的上传凭证,否则会返回 401 表示权限认证失败。 |
| crc32 | string | 否 | 上传内容的 crc32 校验码。如填入,则七牛服务器会使用此值进行内容检验。 |
| accept | string | 否 | 当 HTTP 请求指定 accept 头部时,七牛会返回 content-type 头部的值。该值用于兼容低版本 IE 浏览器行为。低版本 IE 浏览器在表单上传时,返回 application/json 表示下载,返回 text/plain 才会显示返回内容。 |
| file | file | 是 | 文件本身。二进制数据 |
action是上传地址,不算参数。主要考虑resource_key、upload_token、file这3个参数
3. SpringMVC后端实现
3.1. 依赖
1 | <!-- SpringMVC --> |
3.2. qiniu.properties 七云配置文件
1 | # 七牛账号的accessKey |
3.3. QiniuTokenVO 响应返回的VO
封装key和token结果,返回给客户端
1 |
|
3.4. QiniuUtils 获取Token的工具类
1 | public class QiniuUtils { |
3.5. 处理器
1 |
|
4. Vue前端实现
4.1. @/views/qiniu/upload.vue 图片上传组件
1 | <template> |
4.2. 图片上传测试页
1 | <template> |
5. HTML前端表单提交实现
表单方式实现如下
1 | <script src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js"></script> |