又拍云 API 使用的那些小事
又拍云提供了丰富的 API 调用,为了减少用户在初次接入时可能会遇到的坑”,本文将对又拍云常用的 API 使用方法做个简单的梳理,力求让业务接入变得更简单,更高效。
目前我们的 API 主要有四大类,分别是:云存储 API,云处理 API,人工智能 API,后台管理 API。前三类 API 都有主流编程语言对应的 SDK 或可视化的集成工具。

SDK 的使用遵循说明文档配置环境,然后对方法进行引用,一般不会遇到太多的问题。不过有时我们需要抛开 SDK,自行根据文档来实现某个接口的某个功能时可能会遇到一些“坑”,调试的过程中有时候甚至会怀疑人生。调试 API 接口,除了直接用编程语言来调试,还推荐使用 Curl 命令或 Postman 来辅助调试。
云存储 API
云存储 API 是调用比较多的 API,在这个 API 中又以文件上传的接口调用最为频繁,我们就主要以这个接口为例,来做下详细讲述。
API 地址:http://v0.api.upyun.com
支持协议:HTTP ,HTTPS
认证方式:基本认证 ,签名认证
主要功能:上传文件,下载文件,删除(创建)文件(目录),获取文件信息,获取文件列表。
常见问题一:

上面是用 PUT 方法来上传文件,但是返回状态码 401,通过返回的 body 我们可以看出提示是比较清晰的:user not exists。这种情况一般是没有创建操作员或者创建了操作员但是没有授权给对应的服务。操作员这个概念会出现在云存储 API,云处理 API 和人工智能 API 中,所以这是个常见的 401 错误。
常见问题二:

依旧是401错误,不过返回的 body 信息不同:user need permission。这是提示操作员没有权限,因为我们对操作员的权限控制有三个,分别是:读取,写入,删除。

上传属于“写入”操作,所以需要把“可写入”权限勾选上。同理,如果在文件删除过程中出现该问题,那么就需要把“可删除”勾选上。
常见问题三:

调试工具正常,但是代码嵌入网页上传时候控制台报错。这是因为网站用的是 HTTPS 协议,但是请求的是 HTTP 协议的接口,浏览器是拒绝在 HTTPS 的网站内请求 HTTP 协议的地址的,所以把请求地址更改为:https://v0.api.upyun.com/ 即可。
常见问题四:上面三个问题都是用的基本认证,但是认证头并没有加密,只是简单的进行了 Base64 编码,如果在前端暴露出来,将会造成操作员账号泄露。就算只在后端使用,也存在一定的泄露风险。所以生产环境中一般使用签名认证。
文件上传有三种方法,
- 二进制 PUT 上传(适用于后端或者客户端上传)
- 表单 POST 上传(适用于浏览器上传)
- FTP 上传
有时候我们出于某种需求,可能需要在前端使用 PUT 的方式进行浏览器上传。同样的,调试工具正常,但是代码嵌入网页上传时候控制台报错,接口返回 401 状态码,body 信息:need date header。
这是因为除了表单 POST 上传,其他用签名来认证的存储操作(PUT 上传,删除文件,云处理,内容识别等)都需要携带 Date 请求头,生成 Token 的时候 Date 的值也是参与运算的。但是,浏览器根据请求规范拒绝了自定义“unsafe header "Date"”,这怎么办?答案是为了兼容前端的一些请求场景,我们提供了自定义的 Date 请求头 —— X-Date,进行请求头设置和 Token 计算的时候用 X-Date 即可。当然也有人说那为什么不取消这个必须参数 Date 呢?这个校验头是出于安全考虑,从时间的维度上来尽可能的保障请求的合法性。
云处理 API
云处理 API 也是又拍云 API 中的一大类。云处理也需要操作员账号、密码以及权限等,所以上面云存储 API 中遇到账号问题也会在该 API 中出现,这里就不再赘述。
API 地址:http://p0.api.upyun.com,http://p1.api.upyun.com
支持协议:HTTP,HTTPS
认证方式:签名认证
主要功能:音视频异步(同步)处理,异步拉取,文件压缩及解压缩,文档转换。
云处理 API 的请求一般在服务端进行,前端只负责触发一个任务,所以可以避开浏览器的种种限制。这里常常遇到的问题无外乎是签名错误了。其实文档说明比较清楚了,签名的计算方式是:
Authorization: UPYUN <Operator>:<Signature>
<Signature> = Base64 (HMAC-SHA1 (<Password>,<Method>&<URI>&<Date>&<Content-MD5>))
一个成功的请求实例:

因为 Content-MD5 是非必选项,所以我们请求头中不需要添加 Content-MD5 请求头,那么计算签名的时候也就不需要把 body 的 MD5 参与进去了,如下:
Authorization: UPYUN <Operator>:<Signature>
<Signature> = Base64 (HMAC-SHA1 (<Password>,<Method>&<URI>&<Date>))
如果此时我们把 body 体
accept=json&service=tsqtestpic¬ify_url=http://1.1.1.1&source=/x.mp4&tasks=W3siYXZvcHRzIjoiL3IvMy9zLzY0MHgzMjAvc3AvMTgwIiwicmV0dXJuX2luZm8iOnRydWUsInNhdmVfYXMiOiIveC5naWYiLCJ0eXBlIjoidmlkZW8ifV0= 的 MD5 值
d22d7d15f3111a4d1a3ea6359f35e78c 也参与 Signature 的计算,请求最后会报签名错误。也就是说如果请求头中没有使用 Content-MD5,那么计算签名时候就不能让 Content-MD5 参与计算,反之则需要 Content-MD5 参与计算,这个规则在 云存储 API,人工智能 API 都是一致的。
人工智能API
人工智能 API 的调用规则与云存储和云处理的类似,也是使用的签名认证,签名的生成方式也一致。
API 地址:http://p0.api.upyun.com,http://banma.api.upyun.com
支持协议:HTTP,HTTPS
认证方式:签名认证
主要功能:图片识别,点播识别,文本识别
在调用内容识别API接口时,需要注意内容识别分为“有存储”和“无存储”两种鉴别方式。“有存储”指的是待鉴别的图片或者视频是存储在自己的存储服务中,此参与 Authorization 生成的是该存储的操作员账号和操作员密码,“无存储”指的是待鉴别的内容并没有在自己的存储中,此时的提交方式可以是内容本身或 URL,这种方式的 Authorization 生成用的是内容识别控制台中的 ClientKey 和 ClientSecret。
后台管理API
后台管理 API 是又拍云服务管理后台开放接口,使得用户可以对后台进行程序化配置,甚至开发出自己的简易管理后台。
API 地址:http://api.upyun.com
支持协议:HTTP,HTTPS
认证方式:Token 认证
Token 认证过程相对简单些,只需要添加一个请求头 Authorization: Bearer <Token> 来用对应的方法请求对应的接口即可,需要注意的是接口的 POST 和 PUT 请求的 body 都是 json 字符串,所以请求时 Content-Type 需要设置为 application/json。
以上主要对又拍云 API 的使用方法和常见问题做了简单的总结,结合接口的返回信息和文档说明,接入是一件比较简单的事情。在使用场景方面比如 PUT 上传时可以加上预处理作图请求头,图片会处理后再保存;POST 上传的同时可以加云处理的任务(如:色情识别,封面截图,转码适配等)。总体来说,这四大 API 的组合使用基本上可以满足用户的需求。
推荐阅读:
受到 1 万点暴击,二狗子被 DDoS 攻击的惨痛经历
五分钟读懂什么是容器云
又拍云 API 使用的那些小事的更多相关文章
- [网站公告]又拍云API故障造成图片无法上传
大家好,今天早上8:30左右发现又拍云API出现故障,造成图片无法上传,调用图片上传API时出现错误:“The operation has timed out”. 该故障给大家带来了麻烦,望大家谅解! ...
- [网站公告]又拍云API故障造成图片无法上传(已恢复)
大家好,18:00左右开始,又拍云API出现故障,调用图片上传API时出现错误:“The remote server returned an error: (403) Forbidden.”,造成图片 ...
- ajax异步上传到又拍云的实例教程
作者:白狼 出处:www.manks.top/article/async_upload_to_upyun 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否 ...
- 使用plupload绕过服务器,批量上传图片到又拍云
本文最初发布于我的个人博客:Jerry的乐园 综述 论坛或者贴吧经常会需要分享很多图片,上传图片比较差的做法是上传到中央服务器上,中央服务器再转发给静态图片服务器.而这篇文章讲介绍如何使用pluplo ...
- 云储存第三方--阿里云OSS VS 又拍云USS
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...
- OpenResty 在又拍云容器平台中的应用
大家好,我是又拍云叶靖,今天主要分享 OpenResty 在又拍云容器平台中的应用.目前又拍云有很多产品,其中很多都使用了 OpenResty 技术,比如又拍云的 CDN .网关都是基于 OpenRe ...
- 又拍云张聪:OpenResty 动态流控的几种姿势
2019 年 1 月 12 日,由又拍云.OpenResty 中国社区主办的 OpenResty × Open Talk 全国巡回沙龙·深圳站圆满结束,又拍云首席架构师张聪在活动上做了< Ope ...
- 【实战分享】又拍云 OpenResty / Nginx 服务优化实践
2018 年 11 月 17 日,由 OpenResty 主办的 OpenResty Con 2018 在杭州举行.本次 OpenResty Con 的主题涉及 OpenResty 的新开源特性.业界 ...
- ECStore图片云端集群存储实践-又拍云存储
通过又拍云存储REST API ,为ECStore新增图片存储引擎,从而达到图片数据与主站数据分离.提高网站性能. 图片存储引擎相关文件添加与修改 一共涉及到ECStore 2个APP 的文件添加和修 ...
随机推荐
- Motrix for Mac(百度网盘加速/全能下载软件) v1.3.7最新版!
Motrix for Mac最新版第一时间在本站上线!Mac上最强大实用百度网盘加速器Motrix for Mac分享给您!Motrix for Mac是一款非常优秀的下载工具,采用Aria 2作为核 ...
- 我的Python笔记03
摘要: 声明:本文整理借鉴金角大王的Python之路,Day3 - Python基础3,仅供本人学习使用!!! 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4 ...
- linux - word frequency
linux 输出某个文件的单词出现频率 解决方式 cat words.txt |awk '{for(i=1;i<=NF;i++) print $i;}'|sort|uniq -c|sort - ...
- 第二项目AIaisell(易销宝)
一.什么是报表 向上级报告情况的表格.简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:“报表 = 多样的格式 + 动态的数据” 表格:详细数据 图表: 直观 二.表格数据展示 2 ...
- .Karma+Jasmine+karma-coverage
单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的.很明确的功能是否正确.通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为. Karma是一个基于N ...
- Java IO 整理
1.Java IO中的操作类之间的继承关系 2.在java中使用File类表示文件本身,可以直接使用此类完成文件的各种操作,如创建.删除 3.RandomAccessFile类可以从指定位置开始读取数 ...
- 洛谷p3800:Power收集
考虑朴素的dp: 对于每一行的每一个点 枚举能到的所有点(类似bzoj1648 比这题简单的dp) 期望时间复杂度O(NMT) 显然是超时做法 那么我们发现只有k个点对答案有贡献 考虑对每一个有权值的 ...
- javascript 变量的引入、变量的声明、变量的初始化
变量的引入及声明和初始化: 变量: 操作的数据都是在内存中操作 Js中存储数据使用变量的方式(名称,值--->数据) Js中声明变量都用var--->存储数据,数据应该有对应的数据类型 存 ...
- Spark累加器(Accumulator)陷阱及解决办法
累加器(accumulator)是Spark中提供的一种分布式的变量机制,其原理类似于mapreduce,即分布式的改变,然后聚合这些改变.累加器的一个常见用途是在调试时对作业执行过程中的事件进行计数 ...
- JavaScript模板引擎Handlebars
Handlebars模板库简单介绍 Handlebars是JavaScript一个语义模板库,通过对view(模板)和data(ajax请求的数据,一般是json)的分离来快速构建Web模板.它采用& ...