node-qiniu-sdk
Version:
nodejs,七牛云异步操作模块
205 lines (151 loc) • 10.4 kB
Markdown
# node-qiniu-sdk
使用 ES2017 async functions 来操作七牛云,接口名称与官方接口对应,轻松上手,文档齐全
qiniu的官方sdk不太符合日常需要,所以有时间写了个模块,你也可去qiniu官方查看[官方SDK](https://github.com/qiniu/nodejs-sdk)
模块主要包含七牛云以下产品与服务:
- [对象储存 官方文档](https://developer.qiniu.com/kodo)
- [融合CDN 官方文档](https://developer.qiniu.com/fusion)
- [智能多媒体API 官方文档](https://developer.qiniu.com/dora)
- [内容审核 官方文档](https://developer.qiniu.com/censor)
- [智能日志管理平台 官方文档](https://developer.qiniu.com/insight)
## 安装
```bash
$ npm install node-qiniu-sdk
```
## 测试用例
某些请求是需要人民币的,不要频繁测试(单次测试的费用非常非常少)
目前测试用例共104个,如果api我还没有写出来,请先看对应的测试用例
DEBUG=test mocha可以查看操作返回的具体的数据
第一次测试会下载一些测试文件,如果网络不好会出现before部分超时,测试资源请看[node-qiniu-sdk-resource](https://github.com/SunGg12138/node-qiniu-sdk-resource)
av.pm3u8测试接口有可能出现超时的情况
```bash
# 先配置你的/test/resource/qiniu.config.json文件再测试
# qiniu.config.json是放置AccessKey和SecretKey的配置文件
# 格式与qiniu.config.default.json相同,你需要配置你的qiniu.config.json
$ mocha
# 如果想看返回的数据信息可以加上DEBUG=test
$ DEBUG=test mocha
# 如果想看操作信息可以加上DEBUG=qiniu-sdk(例如:分片上传的步骤)
$ DEBUG=qiniu-sdk mocha
```
## package.json
- 1.1.3版本以后使用node-request-slim
本来使用的是request的,但是:
1. 由于request模块在提交content-type为text/plain时,会对数据JSON.stringify,所以会多一对“"”分号
2. request为防止url异常会把url给eccodeURIComponent
这两点在某些请求时会出错,导致请求失败
- 1.6.0版本以后使用[qiniu-auth](https://github.com/SunGg12138/qiniu-auth)模块加密
把加密的部分单独拿出去做一个新的模块,方便其它开发者创建自己的七牛云请求模块
## 使用简介
每个方法都与官网的对应,更多方法可参考[文档](./docs)
```javascript
const Qiniu = require('node-qiniu-sdk');
const qiniu = new Qiniu('<Your AccessKey>', '<Your SecretKey>');
// 所有的方法都返回promise,这里我就直接用await了
// 创建管理储存空间的对象
const bucket = qiniu.bucket('<存储空间名称>');
// 如果你之前没有存储空间,使用mk方法可以创建一个
await bucket.mk();
// 删除存储空间
await bucket.drop();
// 创建管理文件的对象
const file = qiniu.file('<存储空间名称>:<文件名称>');
// 上传文件,这里会使用流的形式上传
await file.upload({ path: '<本地文件路径>' });
// 删除文件
await file.delete();
```
## 请求错误
如果请求时,七牛云响应了错误信息(statusCode不为200或298)时,操作会抛出异常,这里用pandora推送数据失败举例:
其它错误码信息,请查看[错误码快查](#错误码快查)
```javascript
try {
await pandora.send({
// 前提是不存在名字为test的repo
repoName: 'test',
content: [
{ userName: '小张', age: 12, addresses: "beijing"},
{ userName: '小王', age: 13, addresses: "hangzhou"}
]
});
} catch(error) {
// error信息如下:
// {
// statusCode: 404,
// body: {
// error: 'E18102: The specified repo "test" does not exist'
// },
// errmsg: '资源不存在,包括空间资源不存在;镜像源资源不存在。'
// }
}
```
## 各模块功能
模块名称 | 所属产品或服务 | 模块的功能
------------------------|----------------------|--------------------------------
[bucket](./docs/bucket.md) | 对象储存 | 储存空间创建、设置镜像源、设置访问权限、获取空间域名、资源列举、删除
[file](./docs/file.md) | 对象储存 | 文件上传、重命名、复制、删除、修改状态、更新生命周期、修改存储类型、资源元信息查询、资源元信息修改、第三方资源抓取、镜像资源更新、分片上传
[statistic](./docs/statistic.md) | 对象储存 | 数据统计接口
[cdn](./docs/cdn.md) | 融合CDN | 日志下载、日志分析、缓存刷新、刷新查询、预取、预取查询、批量查询cdn带宽、批量查询cdn流量
[image](./docs/image.md) | 智能多媒体API | 获取图片基本信息、图片EXIF信息、图片平均色调信息,图像的瘦身处理、基本处理、高级处理、水印处理、圆角处理以及图片的审核、鉴黄、鉴暴恐、政治人物识别、人脸检测、1:1人脸比对、1:N人脸比对、以图搜图、OCR身份证识别
[av](./docs/av.md) | 智能多媒体API | 视频三鉴、获取单个视频的识别结果、锐智转码、普通音视频转码、音视频分段、音视频切片(HLS)、视频水印、音视频拼接、音视频元信息、视频帧缩略图、视频采样缩略图、实时音视频转码、多码率自适应转码、私有M3U8
[resource](./docs/resource.md) | 智能多媒体API | 获取文件hash值、markdown转html、生成资源二维码、资源合并、资源压缩
[pandora](./docs/pandora.md) | 智能日志管理平台 | 数据推送 API
[sdk](./docs/sdk.md) | 对象储存、持久化处理、处理结果另存 | 获取Bucket列表、异步第三方资源抓取、文件批量操作、下载资源、持久化处理、处理结果另存
#### image.processing图片处理介绍
[processing处理参数详情](./docs/image.md#图片处理)
```javascript
const Qiniu = require('node-qiniu-sdk');
await Qiniu.image.processing(common.url, {
imageslim: true, // 图片瘦身(imageslim)将存储在七牛的JPEG、PNG格式的图片实时压缩而尽可能不影响画质。
imageView: { w: 200, h: 300 }, // 图片基本处理接口可对图片进行缩略操作,生成各种缩略图。
imageMogr: { blur: '20x2', rotate: 45 }, // 图片高级处理接口为开发者提供了一系列高级图片处理功能,包括缩放、裁剪、旋转等。
watermark: { image: 'https://odum9helk.qnssl.com/qiniu-logo.png', scale: 0.3 }, // 七牛云存储提供三种水印接口
roundPic: { radius: 20 } // 图片圆角处理
// 不指定path、stream、saveas会返回处理语句的url
// 指定path或stream会保存到本地(path和stream原理相同)
// path: __dirname + '/processing.test.jpg',
// stream: fs.createWriteStream(__dirname + '/processing.test.jpg'),
// 指定saveas会把处理的结果保存到指定七牛云仓库
// saveas: qiniu.saveas(common.bucketName, 'processing.jpg')
});
```
- 处理前:
<img src="https://raw.githubusercontent.com/SunGg12138/node-qiniu-sdk-resource/master/file.image.test.jpg" width="300">
- 处理后:
由于旋转后背景色自动填充为白色,请到这个链接查看圆角效果:[链接](https://raw.githubusercontent.com/SunGg12138/node-qiniu-sdk-resource/master/processing.test.jpg)

## 错误码快查
[官方文档](https://developer.qiniu.com/kodo/api/3928/error-responses)
HTTP状态码 | 说明
------------------------|----------------------
298 | 部分操作执行成功
400 | 请求报文格式错误,包括上传时,上传表单格式错误。例如incorrect region表示上传域名与上传空间的区域不符,此时需要升级 SDK 版本。
401 | 认证授权失败,错误信息包括密钥信息不正确;数字签名错误;授权已超时,例如token not specified表示上传请求中没有带 token ,可以抓包验证后排查代码逻辑; token out of date表示 token 过期,推荐 token 过期时间设置为 3600 秒(1 小时),如果是客户端上传,建议每次上传从服务端获取新的 token;bad token表示 token 错误,说明生成 token 的算法有问题,建议直接使用七牛服务端 SDK 生成 token。
403 | 权限不足,拒绝访问。例如key doesn't match scope表示上传文件指定的 key 和上传 token 中,putPolicy 的 scope 字段不符。上传指定的 key 必须跟 scope 里的 key 完全匹配或者前缀匹配;ExpUser can only upload image/audio/video/plaintext表示账号是体验用户,体验用户只能上传文本、图片、音频、视频类型的文件,完成实名认证即可解决;not allowed表示您是体验用户,若想继续操作,请先前往实名认证。
404 | 资源不存在,包括空间资源不存在;镜像源资源不存在。
405 | 请求方式错误,主要指非预期的请求方式。
406 | 上传的数据 CRC32 校验错误
413 | 请求资源大小大于指定的最大值
419 | 用户账号被冻结
478 | 镜像回源失败,主要指镜像源服务器出现异常。
502 | 错误网关
503 | 服务端不可用
504 | 服务端操作超时
573 | 单个资源访问频率过高
579 | 上传成功但是回调失败,包括业务服务器异常;七牛服务器异常;服务器间网络异常。需要确认回调服务器接受 POST 请求,并可以给出 200 的响应。
599 | 服务端操作失败
608 | 资源内容被修改
612 | 指定资源不存在或已被删除
614 | 目标资源已存在
630 | 已创建的空间数量达到上限,无法创建新空间。
631 | 指定空间不存在
640 | 调用列举资源(list)接口时,指定非法的marker参数。
701 | 在断点续上传过程中,后续上传接收地址不正确或ctx信息已过期。
如遇 5xx 系列错误,请将完整的错误信息(包括所有的 HTTP 响应头部)[提交工单](https://support.qiniu.com/tickets/category) 给七牛云。
## 官方文档快捷方式
- [API概览](https://developer.qiniu.com/kodo/api/1731/api-overview)
- [HTTP Headers](https://developer.qiniu.com/kodo/api/3924/common-request-headers)
- [错误响应](https://developer.qiniu.com/kodo/api/3928/error-responses)
- [数据格式](https://developer.qiniu.com/kodo/api/1276/data-format)
- [HTTP Headers](https://developer.qiniu.com/kodo/api/3924/common-request-headers)
## LICENSE
MIT