Java SDK
<p><span style="font-size:16px"><strong>1. 简介</strong></span></p>
<ul>
<li>OBS Java SDK 适用于 JDK6 及以上版本;</li>
<li>本文档主要介绍 OBS Java SDK 的接口使用及注意事项;</li>
<li>并且假设您是平安金融云用户,且已经开通了OBS服务;</li>
<li>如果您还没有开通或者还不了解平安金融云 OBS 服务,请登录 OBS产品主页 进行了解。</li>
</ul>
<p> </p>
<p><span style="font-size:16px"><strong>2. SDK下载</strong></span></p>
<p>Java SDK 开发包最新版本<a href="https://obs-cn-shanghai.ocftcloud.com/obs-read-public/fincloud-pingan-obs-java-sdk-3.8.1.jar" target="_blank"><span href="https://obs-cn-shanghai.ocftcloud.com/obs-read-public/fincloud-pingan-obs-java-sdk-3.8.1.jar">v3.8.1</span></a>。</p>
<p>相关依赖包<a href="https://obs-cn-shanghai.ocftcloud.com/obs-read-public/Obs-Lib.zip" target="_blank"> <span href="https://obs-cn-shanghai.ocftcloud.com/obs-read-public/Obs-Lib.zip">OBS-Lib</span></a>。</p>
<p> </p>
<p><span style="font-size:16px"><strong>3. API概览</strong></span></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>API</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>putObject</p>
</td>
<td>
<p>普通上传,若对象存在则更新。</p>
</td>
</tr>
<tr>
<td>
<p>batchPutObject</p>
</td>
<td>
<p>同时上传多个 File 对象到 OBS。</p>
</td>
</tr>
<tr>
<td>
<p>putObjectMultipart</p>
</td>
<td>
<p>对于大文件上传,可以切分成片上传。在以下情况下,应该考虑使用分片上传:</p>
<ul>
<li>文件大于 100M</li>
<li>网络环境差,上传易导致失败</li>
<li>需要支持断点续传</li>
</ul>
</td>
</tr>
<tr>
<td>
<p>abortMultipartUpload</p>
</td>
<td>
<p>分片上传的接口中,当参数 MutilpartUploadFileRequest 的 enableCheckpoint 被设置成 true 时(默认为true),断点续传功能被开启。断点续传允许重试失败的分片,而不需重传已经成功的分片。分片上传会在客户端的文件系统中创建一个分片记录(.ucp)文件。开启断点续传功能后,上传会读取该文件中的记录,而只传还未完成的分片;若此记录文件不存在,则会创建该记录文件,并从头开始上传文件。 由于分片上传的每个片会驻留在 OBS 中,直到所有分片上传完成且执行 complete 操作。未执行 complete 操作的上传,其相关的分片将占用存储资源。用户需要调用取消分片上传的接口来删除这些分片。</p>
</td>
</tr>
<tr>
<td>
<p>putAndCompressObject</p>
</td>
<td>
<p>将File对象进行压缩上传到对象存储,若对象存在则更新。</p>
</td>
</tr>
<tr>
<td>
<p>getObject</p>
</td>
<td>
<p>下载指定对象,此方法将占用一个Http连接,在Content读取完毕或显示关闭时释放连接。若仅为了获得对象的描述信息而非内容,请使用headObject接口。</p>
</td>
</tr>
<tr>
<td>
<p>getSignedUrl</p>
</td>
<td>
<p>获取对象的已签名的下载 URL。</p>
</td>
</tr>
<tr>
<td>
<p>batchGetObject</p>
</td>
<td>
<p>根据多个文件的 objectKey 同时下载多个文件。</p>
</td>
</tr>
<tr>
<td>
<p>getAndUncompressObject</p>
</td>
<td>
<p>解压指定objectKey对象,然后进行下载。</p>
</td>
</tr>
<tr>
<td>
<p>listObjects</p>
</td>
<td>
<p>查询bucket下的对象列表。</p>
</td>
</tr>
<tr>
<td>
<p>headObject</p>
</td>
<td>
<p>获得对象描述信息以及自定义元数据。</p>
</td>
</tr>
<tr>
<td>
<p>deleteObject</p>
</td>
<td>
<p>删除指定对象。</p>
</td>
</tr>
<tr>
<td>
<p>encryptFile</p>
</td>
<td>
<p>客户端加密是指用户数据在发送给远端服务器之前,通过SDK完成加密,而加密所用的密钥由用户方自己保存,从而可以保证用户数据安全和密钥唯一性,即使数据泄漏别人也无法解密得到原始数据。</p>
</td>
</tr>
<tr>
<td>
<p>encryptInputStream</p>
</td>
<td>
<p>客户端加密是指用户数据在发送给远端服务器之前,通过SDK完成加密,而加密所用的密钥由用户方自己保存,从而可以保证用户数据安全和密钥唯一性,即使数据泄漏别人也无法解密得到原始数据。</p>
</td>
</tr>
<tr>
<td>
<p>decryptFile</p>
</td>
<td>
<p>客户端解密是指用户从OBS服务器获取密文后,在客户端进行数据解密。</p>
</td>
</tr>
<tr>
<td>
<p>decryptInputStream</p>
</td>
<td>
<p>客户端解密是指用户从OBS服务器获取密文后,在客户端进行数据解密。</p>
</td>
</tr>
<tr>
<td>
<p>getImageView</p>
</td>
<td>
<p>格式转换,获取适配图片,支持格式 jpeg,tiff, gif, bmp, png ,其中 gif 格式只会保留第一帧图片,此方法将占用一个 Http 连接,在 Content 读取完毕或显示关闭时释放连接。参数 width 和 height 至少需传入一个,不能同时为 0。</p>
</td>
</tr>
<tr>
<td>
<p>getCutImage</p>
</td>
<td>
<p>根据宽度和高度获取剪切图,先截取图片左边和上边,截取到一定大小后(比较小的时候),会截取四边,保留中间部分,当设定值大于图片实际宽、高时,会根据实际大小裁剪,支持 jpeg, tiff, gif, bmp, emf, exif, wmf, icon, png, memoryBmp, webp。此方法将占用一个 Http 连接,在 Content 读取完毕或显示关闭时释放连接。</p>
</td>
</tr>
<tr>
<td>
<p>getImageInfo</p>
</td>
<td>
<p>获取指定图片信息</p>
</td>
</tr>
<tr>
<td>
<p>transCodingMedia</p>
</td>
<td>
<p>媒体转码,此方法将占用一个 Http 连接,在 Content 读取完毕或显示关闭时释放连接。</p>
</td>
</tr>
<tr>
<td>
<p>getVedioFrame</p>
</td>
<td>
<p>获取视频截图,此方法将占用一个 Http 连接,在 Content 读取完毕或显示关闭时释放连接。</p>
</td>
</tr>
<tr>
<td>
<p>getMediaInfo</p>
</td>
<td>
<p>获取媒体对象的信息。</p>
</td>
</tr>
<tr>
<td>
<p>queryMediaByCKs</p>
</td>
<td>
<p>获取 media 转码记录,用于查询转码进度。</p>
</td>
</tr>
<tr>
<td>
<p>pfop</p>
</td>
<td>
<p>图片、音视频异步处理并持久化。</p>
</td>
</tr>
<tr>
<td>
<p>prefop</p>
</td>
<td>
<p>操作pfop操作进度和操作结果。</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><span style="font-size:16px"><strong>4. API描述</strong></span></p>
<p><strong>前言</strong></p>
<p>ObjectKey的定义须符合规范,具体请参照术语说明</p>
<p><strong>(1)初始化服务</strong></p>
<p><strong>描述</strong></p>
<p>RadosgwService 是 OBS 服务的 JAVA 客户端,它为调用者提供一系列与 OBS 进行交互的接口,用于上传下载文件,加密解密文件,处理图片,音视频文件等。用户在调用 SDK 接口前<strong>必须</strong>先初始化 RadosgwService 服务。</p>
<ul>
<li> 基本<strong>配置文件</strong>创建服务实例:</li>
</ul>
<pre>
<code>String configFileName = <your config file name>;
RadosgwService service = RadosgwServiceFactory.
getFromConfigFile(configFileName);</code></pre>
<p>将配置文件信息放在 classpath 下,作为 configFileName.properties 文件存放。</p>
<p>configFileName.properties 信息内容示例如下:</p>
<pre>
<code>access_id = theAccessId
security_id = theSecurityId
rgw_addr = theObsEndPoint</code></pre>
<ul>
<li>基于 <strong>ObsClientConfig </strong><strong>接口对象</strong>创建服务实例:</li>
</ul>
<pre>
<code>ObsClientConfig oc = new ObsClientConfig() {
public String getUserAgent() {
return "<your system name>";
}
public String getObsUrl() {
return "<theObsEndPoint>";
}
public String getObsAccessKey() {
return "<theAccessId>";
}
public String getObsSecret() {
return "<theSecurityId>";
}
};
RadosgwService service = RadosgwServiceFactory.getFromConfigObject(oc);</code></pre>
<p><strong>theObsEndPoint请从OBS</strong><strong>控制台去获取</strong><strong>endpoint</strong><strong>,建议使用</strong><strong>https </strong><strong>的请求,如</strong><strong>"https</strong><strong>:</strong><strong>//obs-cn-shenzhen.ocftcloud.com"。</strong></p>
<p> </p>
<p><strong>(2)文件上传</strong></p>
<p>putObject(String bucket, String objectKey, File localFile)</p>
<p><strong>接口描述</strong></p>
<p>以 File 对象上传对象存储,若对象存在则更新。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p>需自行实现策略保证同一 bucket 下 objectKey唯一, 首字符不能为路径符。</p>
</td>
</tr>
<tr>
<td>
<p>localFile</p>
</td>
<td>
<p>File</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>待上传的文件对象</p>
</td>
<td>
<p>不能超过 1GB</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>putObjectResult </p>
</td>
<td>
<p>PutObjectResult </p>
</td>
<td>
<p>PutObjectResult 对象</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>putObject(String bucket, String objectKey, File localFile, ObjectMetadata metadata)</p>
<p><strong>接口描述</strong></p>
<p>以 File 对象上传对象存储并附带自定义元数据,若对象存在则更新。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p>需自行实现策略保证同一 bucket 下 objectKey唯一, 首字符不能为路径符。</p>
</td>
</tr>
<tr>
<td>
<p>localFile</p>
</td>
<td>
<p>File</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>待上传的文件对象</p>
</td>
<td>
<p>不能超过 1GB</p>
</td>
</tr>
<tr>
<td>
<p>metadata</p>
</td>
<td>
<p>ObjectMetadata</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>自定义元数据</p>
</td>
<td>
<p>key-value 格式,key 只允许使用小写字母、数字、中横线</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>putObjectResult </p>
</td>
<td>
<p>PutObjectResult </p>
</td>
<td>
<p>PutObjectResult 对象</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(3)流式上传</strong></p>
<p>putObject(String bucket, String objectKey, InputStream inputStream)</p>
<p><strong>接口描述</strong></p>
<p>以 InputStream 形式上传对象存储,若对象存在则更新,建议仅用于上传较小的对象<strong>。</strong></p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p>需自行实现策略保证同一 bucket 下 objectKey唯一, 首字符不能为路径符。</p>
</td>
</tr>
<tr>
<td>
<p>inputStream</p>
</td>
<td>
<p>InputStream</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>待上传的流</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>putObjectResult </p>
</td>
<td>
<p>PutObjectResult </p>
</td>
<td>
<p>PutObjectResult 对象</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>putObject(String bucket, String objectKey, InputStream inputStream, ObjectMetadata metadata)</p>
<p><strong>接口描述</strong></p>
<p>以 InputStream 形式上传对象存储并附带对象元数据,若对象存在则更新,大、小对象上传均适用<strong>。</strong></p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p>需自行实现策略保证同一 bucket 下 objectKey唯一, 首字符不能为路径符。</p>
</td>
</tr>
<tr>
<td>
<p>inputStream</p>
</td>
<td>
<p>InputStream</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>待上传的流</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>metadata</p>
</td>
<td>
<p>ObjectMetadata</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>自定义元数据</p>
</td>
<td>
<p>key-value 格式,key 只允许使用小写字母、数字、中横线。建议指定 ContentLength,若不指定,流会被首先全部读取到内存再做上传;建议指定 contentType,若不指定,会赋予默认类型 application/octet-stream。</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>putObjectResult </p>
</td>
<td>
<p>PutObjectResult </p>
</td>
<td>
<p>PutObjectResult 对象</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(4)批量上传</strong></p>
<p>batchPutObject(String bucket, BatchPutFile[] batchPutFiles)</p>
<p><strong>接口描述</strong></p>
<p>同时上传多个 File 对象到 OBS。该接口是串行,逐一上传,可根据实际情况自行实现并行上传。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>batchPutFiles</p>
</td>
<td>
<p>BatchPutFile[]</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>批量上传的文件对象数组</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>BatchPutObjectResults</p>
</td>
<td>
<p>List<BatchPutObjectResult></p>
</td>
<td>
<p>返回结果对象 List,循环该 List 去得到每个文件上传后的结果集。</p>
<p>每个 BatchPutObjectResult 对象中包含该文件上传信息(比如上传是否成功,上传失败原因,文件 MD5 值等)。</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(5)分片上传</strong></p>
<p>putObjectMultipart(MutilpartUploadFileRequest uploadFileRequest)</p>
<p><strong>接口描述</strong></p>
<p>对于大文件上传,可以切分成片上传。在以下情况下,应该考虑使用分片上传:</p>
<p> 文件大于 100M</p>
<p> 网络环境差,上传易导致失败</p>
<p> 需要支持断点续传</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>uploadFileRequest</p>
</td>
<td>
<p>MutilpartUploadFileRequest</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>分片信息设定:每片大小、开启断点续传、开启MD5校验等</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>abortMultipartUpload(AbortMutilpartUploadRequest abortRequest)</p>
<p><strong>接口描述</strong></p>
<p>取消分片上传。分片上传的接口中,当参数 MutilpartUploadFileRequest 的 enableCheckpoint 被设置成 true 时(默认为true),断点续传功能被开启。断点续传允许重试失败的分片,而不需重传已经成功的分片。分片上传会在客户端的文件系统中创建一个分片记录(.ucp)文件。开启断点续传功能后,上传会读取该文件中的记录,而只传还未完成的分片;若此记录文件不存在,则会创建该记录文件,并从头开始上传文件。 由于分片上传的每个片会驻留在 OBS 中,直到所有分片上传完成且执行 complete 操作。未执行 complete 操作的上传,其相关的分片将占用存储资源。用户需要调用取消分片上传的接口来删除这些分片。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>abortRequest</p>
</td>
<td>
<p>AbortMutilpartUploadRequest</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>取消分片的信息</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(6)文件压缩上传</strong></p>
<p>putAndCompressObject(String bucket, String objectKey, File localFile, ObjectMetadata metadata, CompressMode mode)</p>
<p><strong>接口描述</strong></p>
<p>将File对象进行压缩上传到对象存储,若对象存在则更新<strong>。</strong></p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p>需自行实现策略保证同一 bucket 下 objectKey 唯一, 不能为空,首字符不能为路径符</p>
</td>
</tr>
<tr>
<td>
<p>localFile</p>
</td>
<td>
<p>File</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>待上传的文件对象</p>
</td>
<td>
<p>不能超过 1GB</p>
</td>
</tr>
<tr>
<td>
<p>metadata</p>
</td>
<td>
<p>ObjectMetadata</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>自定义元数据</p>
</td>
<td>
<p>key-value 格式,key 只允许使用小写字母、数字、中横线</p>
</td>
</tr>
<tr>
<td>
<p>mode</p>
</td>
<td>
<p>CompressMode枚举类</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>压缩模式</p>
</td>
<td>
<p>支持<strong>MS,ML,ZIP,GZP,LZ4,LZO</strong>模式</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>putObjectResult</p>
</td>
<td>
<p>PutObjectResult</p>
</td>
<td>
<p>PutObjectResult对象</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(7)文件下载</strong></p>
<p>getObject(String bucket, String objectKey)</p>
<p><strong>接口描述</strong></p>
<p>下载指定对象,此方法将占用一个Http连接,在Content读取完毕或显示关闭时释放连接。若仅为了获得对象的描述信息而非内容,请使用headObject接口。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>s3object</p>
</td>
<td>
<p>S3Object</p>
</td>
<td>
<p>包含对象流的 S3Object 实例,需读取 Content 自行保存</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>getSignedUrl(String bucket, String objectKey)</p>
<p><strong>接口描述</strong></p>
<p>获取对象的已签名的下载 URL,使用默认设置。默认有效时间为 15秒<strong>。</strong></p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>url</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>已签名的对象下载 url</p>
</td>
<td>
<p>url 具有默认的有效期,下载文件名为对象 Key</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>getSignedUrl(String bucket, String objectKey, String contentDisposition)</p>
<p><strong>接口描述</strong></p>
<p>获取对象的已签名的下载 URL,指定返回 contentDisposition 头以告知浏览器如何显示文件,并使用默认的 url 有效期 15 秒<strong>。</strong></p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>contentDisposition</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>在请求url时,期望云存储服务端返回的 content-disposition http头信息</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>url</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>已签名的对象下载 url</p>
</td>
<td>
<p>已签名的对象下载 url,url 具有默认的有效期。最长 15 min</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>getSignedUrl(String bucket, String objectKey, String contentDisposition, long expireSeconds)</p>
<p><strong>接口描述</strong></p>
<p>获取对象的已签名的下载URL,指定返回contentDisposition头以告知浏览器如何显示文件,并指定url有效期(秒)<strong>。</strong></p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>contentDisposition</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>在请求url时,期望云存储服务端返回的 content-disposition http头信息</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>expireSeconds</p>
</td>
<td>
<p>long</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>url 有效秒数</p>
</td>
<td>
<p>url 生成后,在此时间段内有效,过期的 url 会被云存储拒绝访问</p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>url</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>已签名的对象下载 url</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(8)批量下载</strong></p>
<p>batchGetObject(String bucketName, String[] objectKeys)</p>
<p><strong>接口描述</strong></p>
<p>根据多个文件的 objectKey 同时下载多个文件。该接口是串行,逐一下载,文件数过大或者文件大小过大会导致读取异常,可根据实际情况自行实现并行下载。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>bucketName</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>objectKeys</p>
</td>
<td>
<p>String[]</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>objectKey 数组</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>batchS3ObjectList</p>
</td>
<td>
<p>List<BatchS3Object></p>
</td>
<td>
<p>批量下载完毕后,SDK 将返回结果对象 List,循环该 List 去得到每个文件下载后的对象,该对象中包含所下载文件的文件流,另外还有该文件下载时的信息(比如下载是否成功,下载失败原因,文件 MD5 值等。)</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(9)文件解压下载</strong></p>
<p>getAndUncompressObject(String bucket, String objectKey)</p>
<p><strong>接口描述</strong></p>
<p>解压指定objectKey对象,然后进行下载。访问成功(http状态码200)最终都需释放链接。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>s3Object</p>
</td>
<td>
<p>S3Object</p>
</td>
<td>
<p>包含对象流的 S3Object 实例,需读取 Content 自行保存</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(10)查询对象列表</strong></p>
<p>listObjects(ListObjectsRequest listObjectsRequest)</p>
<p><strong>接口描述</strong></p>
<p>查询bucket下的对象列表。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>listObjectsRequest</p>
</td>
<td>
<p>ListObjectsRequest</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>查询对象参数设定:结果大小、Key起始位置,前缀等</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>objectListing</p>
</td>
<td>
<p>ObjectListing</p>
</td>
<td>
<p>对象列表</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(11)获取文件信息</strong></p>
<p>headObject(String bucket, String objectKey)</p>
<p><strong>接口描述</strong></p>
<p>获得对象描述信息以及自定义元数据</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>objectMetadata</p>
</td>
<td>
<p>ObjectMetadata</p>
</td>
<td>
<p>对象元数据 ObjectMetadata</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(12)删除Object</strong></p>
<p>deleteObject(String bucketName, String objectKey)</p>
<p><strong>接口描述</strong></p>
<p>删除指定对象</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(13)加密上传</strong></p>
<p>客户端加密是指用户数据在发送给远端服务器之前,通过SDK完成加密,而加密所用的密钥由用户方自己保存,从而可以保证用户数据安全和密钥唯一性,即使数据泄漏别人也无法解密得到原始数据。</p>
<p>encryptFile(File file, String keySource)</p>
<p><strong>接口描述</strong></p>
<p>文件加密上传。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></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>keySource</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>加密文件用的密钥</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>inputStream</p>
</td>
<td>
<p>InputStream</p>
</td>
<td>
<p>文件加密流</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>encryptInputStream(InputStream inputStream, String keySource)</p>
<p><strong>接口描述</strong></p>
<p>流加密上传。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>inputStream</p>
</td>
<td>
<p>InputStream</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>文件流</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>keySource</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>加密文件用的密钥</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>inputStream</p>
</td>
<td>
<p>InputStream</p>
</td>
<td>
<p>文件加密流</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(14)解密文件</strong></p>
<p>客户端解密是指用户从OBS服务器获取密文后,在客户端进行数据解密。</p>
<p>decryptFile(File file, String keySource)</p>
<p><strong>接口描述</strong></p>
<p>解密下载为文件</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></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>keySource</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>加密文件用的密钥</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>inputStream</p>
</td>
<td>
<p>InputStream</p>
</td>
<td>
<p>文件解密流</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>decryptInputStream(InputStream inputStream, String keySource)</p>
<p><strong>接口描述</strong></p>
<p>解密下载文件流。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>inputStream</p>
</td>
<td>
<p>InputStream</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>文件流</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>keySource</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>加密文件用的密钥</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>inputStream</p>
</td>
<td>
<p>InputStream</p>
</td>
<td>
<p>文件解密流</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(15)图片处理</strong></p>
<p>getImageView(String bucket, String objectKey, String mode, int width, int height, String imageFormat)</p>
<p><strong>接口描述</strong></p>
<p>图片格式转换。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>mode</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>缩放方式,有效值 0-5</p>
<p><strong>0</strong>: 限定缩略图的长边最多为 ,短边最多为 ,进行等比缩放,不裁剪。如果只指定 w 参数则表示限定长边(短边自适应),只指定 h 参数则表示限定短边(长边自适应)。</p>
<p><strong>1</strong>: 限定缩略图的宽最少为 ,高最少为 ,进行等比缩放,居中裁剪。转后的缩略图通常恰好是 x 的大小(有一个边缩放的时候会因为超出矩形框而被裁剪掉多余部分)。如果只指定 w 参数或只指定 h 参数,代表限定为长宽相等的正方图。</p>
<p><strong>2</strong>: 限定缩略图的宽最多为 ,高最多为 ,进行等比缩放,不裁剪。如果只指定 w 参数则表示限定宽(长自适应),只指定 h 参数则表示限定长(宽自适应)。它和模式0类似,区别只是限定宽和高,不是限定长边和短边。从应用场景来说,模式0适合移动设备上做缩略图,模式2适合PC上做缩略图。</p>
<p><strong>3</strong>: 限定缩略图的宽最少为 ,高最少为 ,进行等比缩放,不裁剪。如果只指定 w 参数或只指定 h 参数,代表长宽限定为同样的值。你可以理解为模式1是模式3的结果再做居中裁剪得到的。</p>
<p><strong>4</strong>: 限定缩略图的长边最少为 ,短边最少为 ,进行等比缩放,不裁剪。如果只指定 w 参数或只指定 h 参数,表示长边短边限定为同样的值。这个模式很适合在手持设备做图片的全屏查看(把这里的长边短边分别设为手机屏幕的分辨率即可),生成的图片尺寸刚好充满整个屏幕(某一个边可能会超出屏幕)。</p>
<p><strong>5</strong>: 限定缩略图的长边最少为 ,短边最少为 ,进行等比缩放,居中裁剪。如果只指定 w 参数或只指定 h 参数,表示长边短边限定为同样的值。同上模式4,但超出限定的矩形部分会被裁剪。 `width:`</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p> </p>
</td>
<td>
<p> </p>
</td>
<td>
<p> </p>
</td>
<td>
<p>图片宽度,非负数,有效值(0-6000)</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>width</p>
</td>
<td>
<p>Int</p>
</td>
<td>
<p>false</p>
</td>
<td>
<p>图片高度,非负数,有效值(0-6000)</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>height</p>
</td>
<td>
<p>Int</p>
</td>
<td>
<p>false</p>
</td>
<td>
<p>图片格式(非必传),支持jpeg, tiff, gif, bmp, png</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>imageFormat</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>false</p>
</td>
<td>
<p> </p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>s3object</p>
</td>
<td>
<p>S3Object</p>
</td>
<td>
<p>包含对象流的 S3Object 实例,需读取 Content 自行保存</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>getCutImage(String bucket, String objectKey, int width, int height)</p>
<p><strong>接口描述</strong></p>
<p>图片剪切。根据宽度和高度获取剪切图,先截取图片左边和上边,截取到一定大小后(比较小的时候),会截取四边,保留中间部分,当设定值大于图片实际宽、高时,会根据实际大小裁剪,支持 jpeg, tiff, gif, bmp, emf, exif, wmf, icon, png, memoryBmp, webp。此方法将占用一个 Http 连接,在 Content 读取完毕或显示关闭时释放连接。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>width</p>
</td>
<td>
<p>int</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>图片宽度,非负数,有效值(0-6000)</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>height</p>
</td>
<td>
<p>int</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>图片高度,非负数,有效值(0-6000)</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>s3object</p>
</td>
<td>
<p>S3Object</p>
</td>
<td>
<p>包含对象流的 S3Object 实例,需读取 Content 自行保存</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>getImageInfo(String bucket, String objectKey)</p>
<p><strong>接口描述</strong></p>
<p>获取指定图片信息。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>imageInfoStr</p>
</td>
<td>
<p>InputStream</p>
</td>
<td>
<p>图片信息,<strong>json</strong>格式字符串,示例如下:</p>
<p>{</p>
<p> "<strong>ColorModel</strong>": "rgb", //颜色模式</p>
<p> "<strong>Format</strong>": "jpeg", //图片格式</p>
<p> "<strong>FrameNumber</strong>": 0, //缩放方式,与 mode 一样</p>
<p> "<strong>Height</strong>": 1707,</p>
<p> "<strong>Width</strong>": 963</p>
<p>}</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(16)视频处理</strong></p>
<p>transCodingMedia(String bucket, String objectKey, String format, String notifyURL)</p>
<p><strong>接口描述</strong></p>
<p>媒体转码,此方法将占用一个 Http 连接,在 Content 读取完毕或显示关闭时释放连接。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>format</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>转码后对象的格式</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>notifyURL</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>false</p>
</td>
<td>
<p>转码JOB的通知URL,不生效可忽略</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>s3object</p>
</td>
<td>
<p>S3Object</p>
</td>
<td>
<p>包含对象流的 S3Object 实例,需读取 Content 自行保存</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>getVedioFrame(String bucket, String objectKey, String format)</p>
<p><strong>接口描述</strong></p>
<p>获取视频截图,此方法将占用一个 Http 连接,在 Content 读取完毕或显示关闭时释放连接。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>format</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>截图的格式、尺寸</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>s3object</p>
</td>
<td>
<p>S3Object</p>
</td>
<td>
<p>包含对象流的 S3Object 实例,需读取 Content 自行保存</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>getMediaInfo(String bucket, String objectKey)</p>
<p><strong>接口描述</strong></p>
<p>获取媒体信息,此方法将占用一个 Http 连接,在 Content 读取完毕或显示关闭时释放连接。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>对象 Key</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段</strong></p>
<p><strong>名称</strong></p>
</td>
<td>
<p><strong>字段</strong></p>
<p><strong>类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>mediaInfoStr</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>媒体对象的信息,<strong>json</strong>格式字符串,示例如下:</p>
<p>{</p>
<p>"<strong>streams</strong>": [{</p>
<p>"<strong>index</strong>": 0,</p>
<p>"<strong>codec_name</strong>": "mjpeg",</p>
<p>"<strong>codec_long_name</strong>": "MJPEG (Motion JPEG)",</p>
<p>"<strong>codec_type</strong>": "video",</p>
<p>"<strong>codec_time_base</strong>": "1/25",</p>
<p>"<strong>codec_tag_string</strong>": "[0][0][0][0]",</p>
<p>"<strong>codec_tag</strong>": "0x0000",</p>
<p>"<strong>width</strong>": 3885,</p>
<p>"<strong>height</strong>": 2764,</p>
<p>"<strong>has_b_frames</strong>": 0,</p>
<p>"<strong>sample_aspect_ratio</strong>": "1:1",</p>
<p>"<strong>display_aspect_ratio</strong>": "3885:2764",</p>
<p>"<strong>pix_fmt</strong>": "yuvj444p",</p>
<p>"<strong>level</strong>": -99,</p>
<p>"<strong>color_range</strong>": "pc",</p>
<p>"<strong>color_space</strong>": "bt470bg",</p>
<p>"<strong>chroma_location</strong>": "center",</p>
<p>"<strong>refs</strong>": 1,</p>
<p>"<strong>r_frame_rate</strong>": "25/1",</p>
<p>"<strong>avg_frame_rate</strong>": "0/0",</p>
<p>"<strong>time_base</strong>": "1/25",</p>
<p>"<strong>bits_per_raw_sample</strong>": "8",</p>
<p>"<strong>disposition</strong>": {</p>
<p>"<strong>default</strong>": 0,</p>
<p>"<strong>dub</strong>": 0,</p>
<p>"<strong>original</strong>": 0,</p>
<p>"<strong>comment</strong>": 0,</p>
<p>"<strong>lyrics</strong>": 0,</p>
<p>"<strong>karaoke</strong>": 0,</p>
<p>"<strong>forced</strong>": 0,</p>
<p>"<strong>hearing_impaired</strong>": 0,</p>
<p>"<strong>visual_impaired</strong>": 0,</p>
<p>"<strong>clean_effects"</strong>: 0,</p>
<p>"<strong>attached_pic</strong>": 0</p>
<p>}</p>
<p>}],</p>
<p>"<strong>format</strong>": {</p>
<p>"<strong>filename</strong>": "/wls/appsystems/csp-media/data/0b5f036604ea452fbc26810946293644xiaoming-bucket-0009.46a5476297c740239820ed4d64e256a6$002",</p>
<p>"<strong>nb_streams</strong>": 1,</p>
<p>"<strong>nb_programs</strong>": 0,</p>
<p>"<strong>format_name</strong>": "jpeg_pipe",</p>
<p>"<strong>format_long_name</strong>": "piped jpeg sequence",</p>
<p>"<strong>size</strong>": "1659948",</p>
<p>"<strong>probe_score</strong>": 6</p>
<p>}</p>
<p>}</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>queryMediaByCKs(String bucket, List<String> convertedKeys)</p>
<p><strong>接口描述</strong></p>
<p>获取 media 转码记录,用于查询转码进度。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<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>convertedKeys</p>
</td>
<td>
<p>List<String></p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>转换后新生成的对象Key集合</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>mediaResultStr</p>
</td>
<td>
<p>String </p>
</td>
<td>
<p>音视频转码进度信息,json字符串,示例如下:</p>
<p>[{</p>
<p>"<strong>bucket</strong>": "yourBucket",</p>
<p>"<strong>finishTime</strong>": "2017-07-14 13:56:54",</p>
<p>"<strong>submitTime</strong>": "2017-07-14 13:56:53",</p>
<p>"<strong>startTime</strong>": "2017-07-14 13:56:53",</p>
<p>"<strong>state</strong>": "Error", // 状态,用于反应转码进度</p>
<p>"<strong>oriObjectKey</strong>": "46a5476297c740239820ed4d64e256a6$002", // 原始key</p>
<p>"<strong>message</strong>": "desFile.exists: false", // 失败原因</p>
<p>"<strong>convertedKey</strong>": "yourConvertedKey "</p>
<p>}]</p>
<p> </p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(17)图片/音视频持久化处理</strong></p>
<p>pfop(Pfop pfop)</p>
<p><strong>接口描述</strong></p>
<p>图片、音视频异步处理并持久化。</p>
<p><strong>请求参数Pfop</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>sourceType</p>
</td>
<td>
<p>SourceType</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>媒体类型</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>srcBucket</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>srcKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>源key</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>force</p>
</td>
<td>
<p>boolean</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>指定当处理后的KEY已经存在于bucket中是否覆盖已经存在的对象。为true时覆盖。</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>notifyUrl</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>false</p>
</td>
<td>
<p>异步处理完成后通知客户的地址。暂不生效,可忽略设定。</p>
</td>
<td>
<p> </p>
</td>
</tr>
<tr>
<td>
<p>ops</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>持久处理操作列表,用 | 分隔,如:</p>
<p>avthumb/wma;</p>
<p>saveas/ZGRhc2U6cGxhaW50ZXh0LWZyYW1lLTFa|avthumb/mp3;</p>
<p>saveas/ZGRhc2U6cGxhaW50ZXh0LWZyYW1lMVU= 是将源视频文件转成wma并以KEY mywma 存储在bucket ddase下;转成mp3并以KEY mymp3 存储在bucket ddase下。</p>
<p>一个持久处理包括处理命令和存储设置,用 ; 分隔。存储设置以saveas/开头,后接按Base64编码后的字符串。若不指定saveas,则会由obs生成一个key并保存在srcBucket下。</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段名称</strong></p>
</td>
<td>
<p><strong>字段类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>resultStr</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>Pfop异步操作流水号JSON,用于查询操作进度。</p>
<p>{"<strong>persistentId</strong>":</p>
<p>"0443351fbb564de38542f8c092d18389fe9f8345f3ca"}</p>
</td>
<td>
<p>因是异步处理,是否持久化成功需要调用持久化结果查询接口判断。 </p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>prefop(String persistentId)</p>
<p><strong>接口描述</strong></p>
<p>查询pfop操作进度和操作结果。</p>
<p><strong>请求参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必须</strong></p>
</td>
<td>
<p><strong>参数描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>persistentId</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>true</p>
</td>
<td>
<p>异步处理流水号</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>响应参数</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>字段</strong></p>
<p><strong>名称</strong></p>
</td>
<td>
<p><strong>字段</strong></p>
<p><strong>类型</strong></p>
</td>
<td>
<p><strong>字段描述</strong></p>
</td>
<td>
<p><strong>备注</strong></p>
</td>
</tr>
<tr>
<td>
<p>resultStr</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>查询响应为content-type为application/json的字符串,示例如下:</p>
<p>{</p>
<p>"<strong>id</strong>":"0f7edf1e508e4620b8784e5ca4dd7554fe9f82ff1b31",</p>
<p>"<strong>notifyState</strong>":"0",</p>
<p>"<strong>desc</strong>":"The fop was completed successfully",</p>
<p>"<strong>notifyTryTimes</strong>":4,</p>
<p>"<strong>items</strong>":[{</p>
<p>"<strong>cmd</strong>":"convert/900/600/png/75",</p>
<p>"<strong>desc</strong>":"success",</p>
<p>"<strong>error</strong>":"",</p>
<p>"<strong>hash</strong>":"\"b2e18e821063c7713e497dd0c9a6a7e3\"",</p>
<p>"<strong>code</strong>":0,</p>
<p>"<strong>key</strong>":"ZGRhc2U6ZGRhc2VhYzRlZjIyOGQxNDQ0MDRiYmM5ZDYyNzE2ZWU5M2ZhNjA="},</p>
<p>{"<strong>cmd</strong>":"thumb/0/700/800/png/75",</p>
<p>"<strong>desc</strong>":"success",</p>
<p>"<strong>error</strong>":"",</p>
<p>"<strong>hash</strong>":"\"ab63afa8d90fc944ed437d91d8d10b81\"",</p>
<p>"<strong>code</strong>":0,</p>
<p>"<strong>key</strong>":"ZGRhc2U6ZGRhc2U2YjIyOGQ0MWZjZmQ0NTllOGQ2OTRkYTgzNDJmYjkyYzA="},</p>
<p>{"<strong>cmd</strong>":"imageslim",</p>
<p>"<strong>desc</strong>":"success",</p>
<p>"<strong>error</strong>":"",</p>
<p>"<strong>hash</strong>":"\"4e3cd2637001ce77d95928a0e961548f\"",</p>
<p>"<strong>code</strong>":0,</p>
<p>"<strong>key</strong>":"ZGRhc2U6ZGRhc2U0MTcwZWQ0NDc4NzU0NzNkYjUwM2Q5NzU2OTUxN2Y5NTA="</p>
<p>}],</p>
<p>"<strong>inputKey</strong>":"1222_1-test",</p>
<p>"<strong>inputBucket</strong>":"ddase",</p>
<p>"<strong>code</strong>":0,</p>
<p>"<strong>notifyResponseCode</strong>":200</p>
<p>}</p>
</td>
<td>
<p> </p>
</td>
</tr>
</tbody>
</table>
<p><strong>查询结果说明:</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>名称</strong></p>
</td>
<td>
<p><strong>必填</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>code</p>
</td>
<td>
<p>是</p>
</td>
<td>
<p>状态码 0:成功,1:正在处理,2:处理成功但PFOP操作列表部分或全部失败,3:处理失败</p>
</td>
</tr>
<tr>
<td>
<p>desc</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>对应code的描述</p>
</td>
</tr>
<tr>
<td>
<p>id</p>
</td>
<td>
<p>是</p>
</td>
<td>
<p>PFOP持久处理流水号</p>
</td>
</tr>
<tr>
<td>
<p>inputBucket</p>
</td>
<td>
<p>是</p>
</td>
<td>
<p>源文件所在bucket</p>
</td>
</tr>
<tr>
<td>
<p>inputKey</p>
</td>
<td>
<p>是</p>
</td>
<td>
<p>源文件所在key</p>
</td>
</tr>
<tr>
<td>
<p>items</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>持久操作列表(仅当code码为0/2时该字段有值),与通知内容中的items一致,请参阅 通知内容说明</p>
</td>
</tr>
<tr>
<td>
<p>notifyState</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>通知状态 0:成功,1:等待通知,2:通知失败,3:通知彻底失败并不再尝试通知。为空表示处理还未完成。</p>
</td>
</tr>
<tr>
<td>
<p>notifyResponseCode</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>通知客户端的响应码,当响应为200时被认为通知成功</p>
</td>
</tr>
<tr>
<td>
<p>notifyResponseBody</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>通知响应,当通知失败时为失败相关的信息</p>
</td>
</tr>
<tr>
<td>
<p>notifyTryTimes</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>通知客户端已经尝试的次数</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>(18)通用类说明</strong></p>
<p>PutObjectResult</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>eTag</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>文件MD5值,可用于校验非分片上传的文件完整性。</p>
</td>
</tr>
<tr>
<td>
<p>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>文件Key</p>
</td>
</tr>
<tr>
<td>
<p>date</p>
</td>
<td>
<p>Date</p>
</td>
<td>
<p>请求响应时间</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>ObjectMetadata</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>userMetadata</p>
</td>
<td>
<p>Map</p>
</td>
<td>
<p>自定义元数据信息,Key为x-amz-meta-自定义名称</p>
</td>
</tr>
<tr>
<td>
<p>metadata</p>
</td>
<td>
<p>Map</p>
</td>
<td>
<p>http标准请求Header,如Contentype等</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>BatchPutFile</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>file</p>
</td>
<td>
<p>File</p>
</td>
<td>
<p>上传File对象</p>
</td>
</tr>
<tr>
<td>
<p>objectKey</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>文件Key,唯一身份标识</p>
</td>
</tr>
<tr>
<td>
<p>metadata</p>
</td>
<td>
<p>ObjectMetadata</p>
</td>
<td>
<p>必填。对象全量元数据信息</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>BatchPutObjectResult</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>successFlag</p>
</td>
<td>
<p>boolean</p>
</td>
<td>
<p>上传状态。true:成功;false:失败</p>
</td>
</tr>
<tr>
<td>
<p>message</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>上传失败的错误信息</p>
</td>
</tr>
<tr>
<td>
<p>其它参数</p>
</td>
<td>
<p> </p>
</td>
<td>
<p>参照父类PutObjectResult参数说明</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>MutilpartUploadFileRequest</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>bucket</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>桶名称</p>
</td>
</tr>
<tr>
<td>
<p>checkpointFile</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>断点续传 ucp 临时文件的保存位置。默认是上传文件父目录</p>
</td>
</tr>
<tr>
<td>
<p>enableCheckpoint</p>
</td>
<td>
<p>boolean</p>
</td>
<td>
<p>是否启用断点续传。默认开启</p>
</td>
</tr>
<tr>
<td>
<p>enableMD5</p>
</td>
<td>
<p>boolean</p>
</td>
<td>
<p>是否启用MD5文件内容校验。默认开启</p>
</td>
</tr>
<tr>
<td>
<p>key</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>文件Key,唯一身份标识</p>
</td>
</tr>
<tr>
<td>
<p>objectMetadata</p>
</td>
<td>
<p>ObjectMetadata</p>
</td>
<td>
<p>文件元数据信息</p>
</td>
</tr>
<tr>
<td>
<p>partSize</p>
</td>
<td>
<p>long</p>
</td>
<td>
<p>分片大小。默认值5M</p>
</td>
</tr>
<tr>
<td>
<p>retryTimes</p>
</td>
<td>
<p>int</p>
</td>
<td>
<p>单片失败重试次数。默认值0,不重试;最大重试次数3</p>
</td>
</tr>
<tr>
<td>
<p>uploadFile</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>上传文件本地路径</p>
</td>
</tr>
<tr>
<td>
<p>uploadNotifier</p>
</td>
<td>
<p>MutilpartUploadNotifier</p>
</td>
<td>
<p>分片上传监听器,进度通知</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>AbortMutilpartUploadRequest</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必填</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>bucket</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>是</p>
</td>
<td>
<p>桶名称</p>
</td>
</tr>
<tr>
<td>
<p>headers</p>
</td>
<td>
<p>Map</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>请求头</p>
</td>
</tr>
<tr>
<td>
<p>key</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>是</p>
</td>
<td>
<p>文件Key,唯一身份标识</p>
</td>
</tr>
<tr>
<td>
<p>uploadId</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>是</p>
</td>
<td>
<p>分片ID必须实现 uploadNotifier,在对应通知中获取 uploadId</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>CompressMode</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>枚举类别</strong></p>
</td>
<td>
<p><strong>中文简称</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>ML</p>
</td>
<td>
<p>极限模式</p>
</td>
<td>
<p>使用FastLZ算法。压缩率:文本10%,位图60%</p>
</td>
</tr>
<tr>
<td>
<p>MS</p>
</td>
<td>
<p>极速模式</p>
</td>
<td>
<p>使用SNAPPY算法。压缩率:文本15%,位图60%</p>
</td>
</tr>
<tr>
<td>
<p>ZIP</p>
</td>
<td>
<p>zip模式</p>
</td>
<td>
<p>使用JDK自带GZIP算法。其详细信息参照JDK。</p>
</td>
</tr>
<tr>
<td>
<p>GZIP</p>
</td>
<td>
<p>GZIP压缩</p>
</td>
<td>
<p>使用JDK自带DEFLATE算法。其详细信息参照JDK。</p>
</td>
</tr>
<tr>
<td>
<p>LZ4</p>
</td>
<td>
<p>LZ4模式</p>
</td>
<td>
<p>使用LZ77优化后的算法LZ4。压缩率:文本30%,位图不支持</p>
</td>
</tr>
<tr>
<td>
<p>LZO</p>
</td>
<td>
<p>LZO模式</p>
</td>
<td>
<p>LZO 是用 ANSI C语言编写的无损压缩库。适合进行数据的实时压缩解压处理</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>S3Object</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>bucketName</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>桶名称</p>
</td>
</tr>
<tr>
<td>
<p>createTimestamp</p>
</td>
<td>
<p>Long</p>
</td>
<td>
<p>S3Object对象创建时间</p>
</td>
</tr>
<tr>
<td>
<p>key</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>文件Key,唯一身份标识</p>
</td>
</tr>
<tr>
<td>
<p>objectContent</p>
</td>
<td>
<p>S3ObjectInputStream</p>
</td>
<td>
<p>下载文件流。需关闭,否则连接一直处于占用状态</p>
</td>
</tr>
<tr>
<td>
<p>objectMetadata</p>
</td>
<td>
<p>ObjectMetadata</p>
</td>
<td>
<p>对象元数据信息</p>
</td>
</tr>
<tr>
<td>
<p>readStarted</p>
</td>
<td>
<p>boolean</p>
</td>
<td>
<p>下载流是否已开始读</p>
</td>
</tr>
<tr>
<td>
<p>statusCode</p>
</td>
<td>
<p>int</p>
</td>
<td>
<p>http状态码。200代表请求成功</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>BatchS3Object</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>successFlag</p>
</td>
<td>
<p>boolean</p>
</td>
<td>
<p>单个文件下载是否成功</p>
</td>
</tr>
<tr>
<td>
<p>message</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>单个文件下载失败错误信息</p>
</td>
</tr>
<tr>
<td>
<p>其它参数</p>
</td>
<td>
<p> </p>
</td>
<td>
<p>请参照父类S3Object的参数说明</p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>ListObjectsRequest</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>是否必填</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>bucketName</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>是</p>
</td>
<td>
<p>桶名称</p>
</td>
</tr>
<tr>
<td>
<p>delimiter</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>用于对KEY进行分组的分隔符</p>
</td>
</tr>
<tr>
<td>
<p>marker</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>查询KEY的起始位置(不包括此KEY)</p>
</td>
</tr>
<tr>
<td>
<p>maxKeys</p>
</td>
<td>
<p>Integer</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>查询结果最大Key的数量,默认为1000</p>
</td>
</tr>
<tr>
<td>
<p>prefix</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>否</p>
</td>
<td>
<p>查询前缀</p>
</td>
</tr>
</tbody>
</table>
<p>ObjectListing</p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<p><strong>参数名称</strong></p>
</td>
<td>
<p><strong>参数类型</strong></p>
</td>
<td>
<p><strong>描述</strong></p>
</td>
</tr>
<tr>
<td>
<p>bucketName</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>桶名称</p>
</td>
</tr>
<tr>
<td>
<p>commonPrefixes</p>
</td>
<td>
<p>List</p>
</td>
<td>
<p>Key分组列表。按照prefix/起始位置到delimiter为一组</p>
</td>
</tr>
<tr>
<td>
<p>delimiter</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>用于对KEY进行分组的字符</p>
</td>
</tr>
<tr>
<td>
<p>isTruncated</p>
</td>
<td>
<p>boolean</p>
</td>
<td>
<p>查询结果是否被截取。若被截取,则表示查询还有下一页</p>
</td>
</tr>
<tr>
<td>
<p>marker</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>指定查询KEY的起始位置(不包括此KEY)</p>
</td>
</tr>
<tr>
<td>
<p>maxKeys</p>
</td>
<td>
<p>int</p>
</td>
<td>
<p>查询结果最大Key的数量,默认为1000</p>
</td>
</tr>
<tr>
<td>
<p>nextMarker</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>下一页的mark。注意:此字段仅在请求中包含了delimiter参数时才会出现在响应中。否则,应该取响应中的KEY列表(object Summaries)的最后一个元素作为下一页请求的mark参数。</p>
</td>
</tr>
<tr>
<td>
<p>objects</p>
</td>
<td>
<p>List<S3Object></p>
</td>
<td>
<p>返回的对象基本信息,包括key、元数据信息,不包括对象数据</p>
</td>
</tr>
<tr>
<td>
<p>prefix</p>
</td>
<td>
<p>String</p>
</td>
<td>
<p>查询前缀</p>
</td>
</tr>
</tbody>
</table>
提交成功!非常感谢您的反馈,我们会继续努力做到更好!