Android SDK
<p> </p>
<p>1. 简介</p>
<ul>
<li>本文档主要介绍 OBS Android SDK 的接口使用及注意事项;</li>
<li>并且假设您已经开通了 OBS 服务,并已是平安公有云用户;</li>
<li>如果您还没有开通或者还不了解平安云 OBS 服务,请登录 <a href="/ssr/products/OBS" target="_blank">OBS产品主页</a>进行了解;</li>
<li>OBS-Android-SDK 是由平安云团队开发的工具包。便于开发者在 Android 上方便使用平安云当中的 OBS 服务;</li>
<li>文档主要罗列了 OBS-Android-SDK 中,上传以及下载的一些基本方法,并对方法参数进行简要解释,且对响应方法有一个详细的说明。</li>
</ul>
<p>2. SDK下载</p>
<p>Android SDK 开发包最新版本 <a href="https://pcp-portal-sca.obs-cn-shenzhen.pinganyun.com/sdk%2Fobs-android-sdk-1.2.0.jar?response-content-disposition=attachment%3Bfilename%3Dobs-android-sdk-1.2.0.jar" target="_blank">v1.2.0</a></p>
<p>3. API概览</p>
<table>
<caption> </caption>
<thead>
<tr>
<th>
<p>API</p>
</th>
<th>
<p>描述</p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>init</p>
</td>
<td>
<p>初始化服务</p>
</td>
</tr>
<tr>
<td>
<p>uploadFile</p>
</td>
<td>
<p>上传文件</p>
<p>OBS SDK提供了丰富的文件上传接口,可以通过以下方式上传文件:</p>
<ul>
<li>文件上传</li>
<li>分片上传</li>
</ul>
</td>
</tr>
<tr>
<td>
<p>sliceUploadFile</p>
</td>
<td>
<p>分片上传文件</p>
</td>
</tr>
<tr>
<td>
<p>uploadImageScale</p>
</td>
<td>
<p>压缩上传图片</p>
</td>
</tr>
<tr>
<td>
<p>downloadFile</p>
</td>
<td>
<p>下载文件</p>
</td>
</tr>
</tbody>
</table>
<p>4. API描述</p>
<p><strong>(1) init</strong></p>
<p><strong>接口描述</strong></p>
<p>初始化服务,在 Application 中初始化:</p>
<pre>
<code>RequestManager.getInstance().init(this);
</code></pre>
<p><strong>(2) uploadFile</strong></p>
<p><strong>接口描述</strong></p>
<p>根据文件路径上传</p>
<p><strong>请求参数</strong></p>
<table>
<caption> </caption>
<thead>
<tr>
<th>
<p>参数名称</p>
</th>
<th>
<p>参数类型</p>
</th>
<th>
<p>是否必须</p>
</th>
<th>
<p>参数描述</p>
</th>
<th>
<p>备注</p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>bucket</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>所要上传到指定bucket的名称</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>fileKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对应bucket里文件的key</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>filePath</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>上传文件路径</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>config</p>
</td>
<td>
<p>Configuration</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>配置上传下载服务器地址</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>requestListener</p>
</td>
<td>
<p>RequestListener</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>请求的回调</p>
</td>
<td>
<p>-</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<p>无</p>
<p><strong>(3) uploadFile</strong></p>
<p><strong>接口描述</strong></p>
<p>根据文件上传</p>
<p><strong>请求参数</strong></p>
<table>
<caption> </caption>
<thead>
<tr>
<th>
<p>参数名称</p>
</th>
<th>
<p>参数类型</p>
</th>
<th>
<p>是否必须</p>
</th>
<th>
<p>参数描述</p>
</th>
<th>
<p>备注</p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>bucket</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>所要上传到指定bucket的名称</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>fileKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对应bucket里文件的key</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>file</p>
</td>
<td>
<p>File</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>上传文件对象</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>config</p>
</td>
<td>
<p>Configuration</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>配置上传下载服务器地址</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>requestListener</p>
</td>
<td>
<p>RequestListener</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>请求的回调</p>
</td>
<td>
<p>-</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<p>无</p>
<p><strong>(4) sliceUploadFile</strong></p>
<p><strong>接口描述</strong></p>
<p>分片上传文件</p>
<p><strong>请求参数</strong></p>
<table>
<caption> </caption>
<thead>
<tr>
<th>
<p>参数名称</p>
</th>
<th>
<p>参数类型</p>
</th>
<th>
<p>是否必须</p>
</th>
<th>
<p>参数描述</p>
</th>
<th>
<p>备注</p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>bucket</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>所要上传到指定bucket的名称</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>fileKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对应bucket里文件的key</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>filePath</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>上传文件路径</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>config</p>
</td>
<td>
<p>Configuration</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>配置上传下载服务器地址</p>
</td>
<td>
<p>必须设置recorder参数</p>
</td>
</tr>
<tr>
<td>
<p>requestListener</p>
</td>
<td>
<p>RequestListener</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>请求的回调</p>
</td>
<td>
<p>-</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<p>无</p>
<p><strong>(5) uploadImageScale</strong></p>
<p><strong>接口描述</strong></p>
<p>压缩上传图片</p>
<p><strong>请求参数</strong></p>
<table>
<caption> </caption>
<thead>
<tr>
<th>
<p>参数名称</p>
</th>
<th>
<p>参数类型</p>
</th>
<th>
<p>是否必须</p>
</th>
<th>
<p>参数描述</p>
</th>
<th>
<p>备注</p>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>bucket</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>所要上传到指定bucket的名称</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>fileKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对应bucket里文件的key</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>file</p>
</td>
<td>
<p>File</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>上传文件路径</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>config</p>
</td>
<td>
<p>Configuration</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>配置上传下载服务器地址</p>
</td>
<td>
<p>必须设置recorder参数</p>
</td>
</tr>
<tr>
<td>
<p>compress</p>
</td>
<td>
<p>float</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>缩小的比例0-1</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>requestListener</p>
</td>
<td>
<p>RequestListener</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>请求的回调</p>
</td>
<td>
<p>-</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<p>无</p>
<p><strong>(6)downloadFile</strong></p>
<p><strong>接口描述</strong></p>
<p>下载文件</p>
<p><strong>请求参数</strong></p>
<table>
<caption> </caption>
<thead>
<tr>
<th>参数名称</th>
<th>参数类型</th>
<th>是否必须</th>
<th>参数描述</th>
<th>备注</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>bucket</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>所要上传到指定bucket的名称</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>fileKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对应bucket里文件的key</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>downloadLocaPath</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>下载到本地的文件夹路径</p>
</td>
<td>
<p>以/结尾</p>
</td>
</tr>
<tr>
<td>
<p>config</p>
</td>
<td>
<p>Configuration</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>配置上传下载服务器地址</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>fileName</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>下载后展示的文件名</p>
</td>
<td>
<p>-</p>
</td>
</tr>
<tr>
<td>
<p>requestListener</p>
</td>
<td>
<p>RequestListener</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>请求的回调</p>
</td>
<td>
<p>-</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table>
<caption> </caption>
<thead>
<tr>
<th>参数名称</th>
<th>参数类型</th>
<th>参数描述</th>
<th>备注</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>/</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>sdk请求Id</p>
</td>
<td>
<p>可作为取消cancel下载的入参</p>
</td>
</tr>
</tbody>
</table>
<p>5.其他说明</p>
<p><strong>(1)设置https</strong></p>
<pre>
Configuration config = <strong>new</strong> Configuration.Builder().***.useHttps(true).***.build();</pre>
<p><strong>(2)取消请求</strong></p>
<pre>
RequestManager.getInstance().cancel(NET_TAG);</pre>
<p>说明: 每一个请求会返回一个唯一的tag。</p>
<p><strong>(3)签名回调</strong></p>
<pre>
config.setSignerCredentialProvider(<strong>new</strong> SignerCredentialProvider() {
<em><span style="color:gray">@Override</span></em>
<strong>public</strong> String signContent(String content) {
<em>//signContent中的content的数据是由“\n”分割的参数:</em>
String[] params = content.split(“\n”);
<em>//访问后端签名服务(建议采用POST提交,所有参数都放在Body,避免对部分参数进行url编码),返回完整的authorization(AWS AK:token),如:AWS NEM3NEE************jA2NTE3M0I0RjY:Zy3ewmKyDQyQoQLc+ssoxoPKqaE=</em>
<strong>return</strong> authorization;
}
</pre>
<p>入参content各元素含义:</p>
<ul>
<li>params[0]; POST/GET……,Http method</li>
<li>params[1]; Bucket,桶名称</li>
<li>params[2]; key,文件在OBS唯一标识</li>
<li>params[3]; content-type,文件类型</li>
<li>params[4]; date,请求产生时间(GMT格式,如:Fri, 15 May 2020 06:20:34 GMT)</li>
<li>params[5]; uri,一般为/{bucket}/{key}(普通上传、下载等接口uri)或者/mkblk/{bucket}/{key:.*}/{blockIndex}(分片上传接口,分片上传另外还有bput、mkfile等接口)</li>
</ul>
<p><strong>后端签名服务实现</strong></p>
<p>(1) JAVA SDK方式</p>
<p>请参见<a href="/ssr/help/storage/obs/OBS_SDK_.creatsign" target="_blank">生成签名</a>。</p>
<p>(2)自行实现签名算法</p>
<p>请参见<a href="/ssr/help/storage/obs/api.Introduction" target="_blank">签名生成规则</a>。</p>
提交成功!非常感谢您的反馈,我们会继续努力做到更好!