使用 ES2017 async functions 来操作七牛云,接口名称与官方接口对应,轻松上手,文档齐全
qiniu的官方sdk不太符合日常需要,所以有时间写了个模块,你也可去qiniu官方查看官方SDK
模块主要包含七牛云以下产品与服务:
$ npm install node-qiniu-sdk
某些请求是需要人民币的,不要频繁测试(单次测试的费用非常非常少)
目前测试用例共104个,如果api我还没有写出来,请先看对应的测试用例 DEBUG=test mocha可以查看操作返回的具体的数据
第一次测试会下载一些测试文件,如果网络不好会出现before部分超时,测试资源请看node-qiniu-sdk-resource
av.pm3u8测试接口有可能出现超时的情况
# 先配置你的/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
-
1.1.3版本以后使用node-request-slim
本来使用的是request的,但是:
- 由于request模块在提交content-type为text/plain时,会对数据JSON.stringify,所以会多一对“"”分号
- request为防止url异常会把url给eccodeURIComponent
这两点在某些请求时会出错,导致请求失败
-
1.6.0版本以后使用qiniu-auth模块加密
把加密的部分单独拿出去做一个新的模块,方便其它开发者创建自己的七牛云请求模块
每个方法都与官网的对应,更多方法可参考文档
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推送数据失败举例:
其它错误码信息,请查看错误码快查
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 | 对象储存 | 储存空间创建、设置镜像源、设置访问权限、获取空间域名、资源列举、删除 |
file | 对象储存 | 文件上传、重命名、复制、删除、修改状态、更新生命周期、修改存储类型、资源元信息查询、资源元信息修改、第三方资源抓取、镜像资源更新、分片上传 |
statistic | 对象储存 | 数据统计接口 |
cdn | 融合CDN | 日志下载、日志分析、缓存刷新、刷新查询、预取、预取查询、批量查询cdn带宽、批量查询cdn流量 |
image | 智能多媒体API | 获取图片基本信息、图片EXIF信息、图片平均色调信息,图像的瘦身处理、基本处理、高级处理、水印处理、圆角处理以及图片的审核、鉴黄、鉴暴恐、政治人物识别、人脸检测、1:1人脸比对、1:N人脸比对、以图搜图、OCR身份证识别 |
av | 智能多媒体API | 视频三鉴、获取单个视频的识别结果、锐智转码、普通音视频转码、音视频分段、音视频切片(HLS)、视频水印、音视频拼接、音视频元信息、视频帧缩略图、视频采样缩略图、实时音视频转码、多码率自适应转码、私有M3U8 |
resource | 智能多媒体API | 获取文件hash值、markdown转html、生成资源二维码、资源合并、资源压缩 |
pandora | 智能日志管理平台 | 数据推送 API |
sdk | 对象储存、持久化处理、处理结果另存 | 获取Bucket列表、异步第三方资源抓取、文件批量操作、下载资源、持久化处理、处理结果另存 |
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')
});
- 处理前:
- 处理后:
由于旋转后背景色自动填充为白色,请到这个链接查看圆角效果:链接
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 响应头部)提交工单 给七牛云。
MIT