Java SDK

<p><span style="font-size:16px"><strong>1.&nbsp;简介</strong></span></p> <ul> <li>OBS Java SDK 适用于 JDK6 及以上版本;</li> <li>本文档主要介绍 OBS Java SDK 的接口使用及注意事项;</li> <li>并且假设您是平安金融云用户,且已经开通了OBS服务;</li> <li>如果您还没有开通或者还不了解平安金融云 OBS 服务,请登录&nbsp;OBS产品主页&nbsp;进行了解。</li> </ul> <p>&nbsp;</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>&nbsp;</p> <p><span style="font-size:16px"><strong>3.&nbsp;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>&nbsp;</p> <p><span style="font-size:16px"><strong>4.&nbsp;API描述</strong></span></p> <p><strong>前言</strong></p> <p>ObjectKey的定义须符合规范,具体请参照术语说明</p> <p><strong>(1)初始化服务</strong></p> <p><strong>描述</strong></p> <p>RadosgwService&nbsp;是 OBS 服务的 JAVA 客户端,它为调用者提供一系列与 OBS 进行交互的接口,用于上传下载文件,加密解密文件,处理图片,音视频文件等。用户在调用 SDK 接口前<strong>必须</strong>先初始化&nbsp;RadosgwService&nbsp;服务。</p> <ul> <li>&nbsp;基本<strong>配置文件</strong>创建服务实例:</li> </ul> <pre> <code>String configFileName = &lt;your config file name&gt;; RadosgwService service = RadosgwServiceFactory. getFromConfigFile(configFileName);</code></pre> <p>将配置文件信息放在 classpath 下,作为&nbsp;configFileName.properties&nbsp;文件存放。</p> <p>configFileName.properties&nbsp;信息内容示例如下:</p> <pre> <code>access_id = theAccessId security_id = theSecurityId rgw_addr = theObsEndPoint</code></pre> <ul> <li>基于&nbsp;<strong>ObsClientConfig </strong><strong>接口对象</strong>创建服务实例:</li> </ul> <pre> <code>ObsClientConfig oc = new ObsClientConfig() { public String getUserAgent() {     return "&lt;your system name&gt;";   }   public String getObsUrl() {     return "&lt;theObsEndPoint&gt;";   }   public String getObsAccessKey() {     return "&lt;theAccessId&gt;";   }   public String getObsSecret() {     return "&lt;theSecurityId&gt;";   } }; 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>&quot;https</strong><strong>:</strong><strong>//obs-cn-shenzhen.ocftcloud.com&quot;。</strong></p> <p>&nbsp;</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>&nbsp;</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唯一,&nbsp;首字符不能为路径符。</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&nbsp;</p> </td> <td> <p>PutObjectResult&nbsp;</p> </td> <td> <p>PutObjectResult&nbsp;对象</p> </td> <td> <p>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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唯一,&nbsp;首字符不能为路径符。</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&nbsp;</p> </td> <td> <p>PutObjectResult&nbsp;</p> </td> <td> <p>PutObjectResult&nbsp;对象</p> </td> <td> <p>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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唯一,&nbsp;首字符不能为路径符。</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>&nbsp;</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&nbsp;</p> </td> <td> <p>PutObjectResult&nbsp;</p> </td> <td> <p>PutObjectResult&nbsp;对象</p> </td> <td> <p>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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唯一,&nbsp;首字符不能为路径符。</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>&nbsp;</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,若不指定,会赋予默认类型&nbsp;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&nbsp;</p> </td> <td> <p>PutObjectResult&nbsp;</p> </td> <td> <p>PutObjectResult&nbsp;对象</p> </td> <td> <p>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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&lt;BatchPutObjectResult&gt;</p> </td> <td> <p>返回结果对象 List,循环该 List 去得到每个文件上传后的结果集。</p> <p>每个 BatchPutObjectResult 对象中包含该文件上传信息(比如上传是否成功,上传失败原因,文件 MD5 值等)。</p> </td> <td> <p>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</p> <p><strong>(5)分片上传</strong></p> <p>putObjectMultipart(MutilpartUploadFileRequest uploadFileRequest)</p> <p><strong>接口描述</strong></p> <p>对于大文件上传,可以切分成片上传。在以下情况下,应该考虑使用分片上传:</p> <p>&nbsp;文件大于 100M</p> <p>&nbsp;网络环境差,上传易导致失败</p> <p>&nbsp;需要支持断点续传</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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&lt;BatchS3Object&gt;</p> </td> <td> <p>批量下载完毕后,SDK 将返回结果对象 List,循环该 List 去得到每个文件下载后的对象,该对象中包含所下载文件的文件流,另外还有该文件下载时的信息(比如下载是否成功,下载失败原因,文件 MD5 值等。)</p> </td> <td> <p>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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&nbsp;</p> </td> <td> <p>File&nbsp;</p> </td> <td> <p>true</p> </td> <td> <p>文件对象</p> </td> <td> <p>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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&nbsp;</p> </td> <td> <p>File&nbsp;</p> </td> <td> <p>true</p> </td> <td> <p>本地保存文件对象</p> </td> <td> <p>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>: 限定缩略图的长边最多为&nbsp;,短边最多为&nbsp;,进行等比缩放,不裁剪。如果只指定 w 参数则表示限定长边(短边自适应),只指定 h 参数则表示限定短边(长边自适应)。</p> <p><strong>1</strong>: 限定缩略图的宽最少为&nbsp;,高最少为&nbsp;,进行等比缩放,居中裁剪。转后的缩略图通常恰好是&nbsp;x&nbsp;的大小(有一个边缩放的时候会因为超出矩形框而被裁剪掉多余部分)。如果只指定 w 参数或只指定 h 参数,代表限定为长宽相等的正方图。</p> <p><strong>2</strong>: 限定缩略图的宽最多为&nbsp;,高最多为&nbsp;,进行等比缩放,不裁剪。如果只指定 w 参数则表示限定宽(长自适应),只指定 h 参数则表示限定长(宽自适应)。它和模式0类似,区别只是限定宽和高,不是限定长边和短边。从应用场景来说,模式0适合移动设备上做缩略图,模式2适合PC上做缩略图。</p> <p><strong>3</strong>: 限定缩略图的宽最少为&nbsp;,高最少为&nbsp;,进行等比缩放,不裁剪。如果只指定 w 参数或只指定 h 参数,代表长宽限定为同样的值。你可以理解为模式1是模式3的结果再做居中裁剪得到的。</p> <p><strong>4</strong>: 限定缩略图的长边最少为&nbsp;,短边最少为&nbsp;,进行等比缩放,不裁剪。如果只指定 w 参数或只指定 h 参数,表示长边短边限定为同样的值。这个模式很适合在手持设备做图片的全屏查看(把这里的长边短边分别设为手机屏幕的分辨率即可),生成的图片尺寸刚好充满整个屏幕(某一个边可能会超出屏幕)。</p> <p><strong>5</strong>: 限定缩略图的长边最少为&nbsp;,短边最少为&nbsp;,进行等比缩放,居中裁剪。如果只指定 w 参数或只指定 h 参数,表示长边短边限定为同样的值。同上模式4,但超出限定的矩形部分会被裁剪。 `width:`</p> </td> <td> <p>&nbsp;</p> </td> </tr> <tr> <td> <p>&nbsp;</p> </td> <td> <p>&nbsp;</p> </td> <td> <p>&nbsp;</p> </td> <td> <p>图片宽度,非负数,有效值(0-6000)</p> </td> <td> <p>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> <tr> <td> <p>imageFormat</p> </td> <td> <p>String</p> </td> <td> <p>false</p> </td> <td> <p>&nbsp;</p> </td> <td> <p>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp; &quot;<strong>ColorModel</strong>&quot;: &quot;rgb&quot;, //颜色模式</p> <p>&nbsp; &quot;<strong>Format</strong>&quot;: &quot;jpeg&quot;, //图片格式</p> <p>&nbsp; &quot;<strong>FrameNumber</strong>&quot;: 0, //缩放方式,与 mode 一样</p> <p>&nbsp; &quot;<strong>Height</strong>&quot;: 1707,</p> <p>&nbsp; &quot;<strong>Width</strong>&quot;: 963</p> <p>}</p> </td> <td> <p>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&quot;<strong>streams</strong>&quot;: [{</p> <p>&quot;<strong>index</strong>&quot;: 0,</p> <p>&quot;<strong>codec_name</strong>&quot;: &quot;mjpeg&quot;,</p> <p>&quot;<strong>codec_long_name</strong>&quot;: &quot;MJPEG (Motion JPEG)&quot;,</p> <p>&quot;<strong>codec_type</strong>&quot;: &quot;video&quot;,</p> <p>&quot;<strong>codec_time_base</strong>&quot;: &quot;1/25&quot;,</p> <p>&quot;<strong>codec_tag_string</strong>&quot;: &quot;[0][0][0][0]&quot;,</p> <p>&quot;<strong>codec_tag</strong>&quot;: &quot;0x0000&quot;,</p> <p>&quot;<strong>width</strong>&quot;: 3885,</p> <p>&quot;<strong>height</strong>&quot;: 2764,</p> <p>&quot;<strong>has_b_frames</strong>&quot;: 0,</p> <p>&quot;<strong>sample_aspect_ratio</strong>&quot;: &quot;1:1&quot;,</p> <p>&quot;<strong>display_aspect_ratio</strong>&quot;: &quot;3885:2764&quot;,</p> <p>&quot;<strong>pix_fmt</strong>&quot;: &quot;yuvj444p&quot;,</p> <p>&quot;<strong>level</strong>&quot;: -99,</p> <p>&quot;<strong>color_range</strong>&quot;: &quot;pc&quot;,</p> <p>&quot;<strong>color_space</strong>&quot;: &quot;bt470bg&quot;,</p> <p>&quot;<strong>chroma_location</strong>&quot;: &quot;center&quot;,</p> <p>&quot;<strong>refs</strong>&quot;: 1,</p> <p>&quot;<strong>r_frame_rate</strong>&quot;: &quot;25/1&quot;,</p> <p>&quot;<strong>avg_frame_rate</strong>&quot;: &quot;0/0&quot;,</p> <p>&quot;<strong>time_base</strong>&quot;: &quot;1/25&quot;,</p> <p>&quot;<strong>bits_per_raw_sample</strong>&quot;: &quot;8&quot;,</p> <p>&quot;<strong>disposition</strong>&quot;: {</p> <p>&quot;<strong>default</strong>&quot;: 0,</p> <p>&quot;<strong>dub</strong>&quot;: 0,</p> <p>&quot;<strong>original</strong>&quot;: 0,</p> <p>&quot;<strong>comment</strong>&quot;: 0,</p> <p>&quot;<strong>lyrics</strong>&quot;: 0,</p> <p>&quot;<strong>karaoke</strong>&quot;: 0,</p> <p>&quot;<strong>forced</strong>&quot;: 0,</p> <p>&quot;<strong>hearing_impaired</strong>&quot;: 0,</p> <p>&quot;<strong>visual_impaired</strong>&quot;: 0,</p> <p>&quot;<strong>clean_effects&quot;</strong>: 0,</p> <p>&quot;<strong>attached_pic</strong>&quot;: 0</p> <p>}</p> <p>}],</p> <p>&quot;<strong>format</strong>&quot;: {</p> <p>&quot;<strong>filename</strong>&quot;: &quot;/wls/appsystems/csp-media/data/0b5f036604ea452fbc26810946293644xiaoming-bucket-0009.46a5476297c740239820ed4d64e256a6$002&quot;,</p> <p>&quot;<strong>nb_streams</strong>&quot;: 1,</p> <p>&quot;<strong>nb_programs</strong>&quot;: 0,</p> <p>&quot;<strong>format_name</strong>&quot;: &quot;jpeg_pipe&quot;,</p> <p>&quot;<strong>format_long_name</strong>&quot;: &quot;piped jpeg sequence&quot;,</p> <p>&quot;<strong>size</strong>&quot;: &quot;1659948&quot;,</p> <p>&quot;<strong>probe_score</strong>&quot;: 6</p> <p>}</p> <p>}</p> </td> <td> <p>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</p> <p>queryMediaByCKs(String bucket, List&lt;String&gt; 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>&nbsp;</p> </td> </tr> <tr> <td> <p>convertedKeys</p> </td> <td> <p>List&lt;String&gt;</p> </td> <td> <p>true</p> </td> <td> <p>转换后新生成的对象Key集合</p> </td> <td> <p>&nbsp;</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&nbsp;</p> </td> <td> <p>音视频转码进度信息,json字符串,示例如下:</p> <p>[{</p> <p>&quot;<strong>bucket</strong>&quot;: &quot;yourBucket&quot;,</p> <p>&quot;<strong>finishTime</strong>&quot;: &quot;2017-07-14 13:56:54&quot;,</p> <p>&quot;<strong>submitTime</strong>&quot;: &quot;2017-07-14 13:56:53&quot;,</p> <p>&quot;<strong>startTime</strong>&quot;: &quot;2017-07-14 13:56:53&quot;,</p> <p>&quot;<strong>state</strong>&quot;: &quot;Error&quot;, // 状态,用于反应转码进度</p> <p>&quot;<strong>oriObjectKey</strong>&quot;: &quot;46a5476297c740239820ed4d64e256a6$002&quot;, // 原始key</p> <p>&quot;<strong>message</strong>&quot;: &quot;desFile.exists: false&quot;, // 失败原因</p> <p>&quot;<strong>convertedKey</strong>&quot;: &quot;yourConvertedKey &quot;</p> <p>}]</p> <p>&nbsp;</p> </td> <td> <p>&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>{&quot;<strong>persistentId</strong>&quot;:</p> <p>&quot;0443351fbb564de38542f8c092d18389fe9f8345f3ca&quot;}</p> </td> <td> <p>因是异步处理,是否持久化成功需要调用持久化结果查询接口判断。&nbsp;</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&quot;<strong>id</strong>&quot;:&quot;0f7edf1e508e4620b8784e5ca4dd7554fe9f82ff1b31&quot;,</p> <p>&quot;<strong>notifyState</strong>&quot;:&quot;0&quot;,</p> <p>&quot;<strong>desc</strong>&quot;:&quot;The fop was completed successfully&quot;,</p> <p>&quot;<strong>notifyTryTimes</strong>&quot;:4,</p> <p>&quot;<strong>items</strong>&quot;:[{</p> <p>&quot;<strong>cmd</strong>&quot;:&quot;convert/900/600/png/75&quot;,</p> <p>&quot;<strong>desc</strong>&quot;:&quot;success&quot;,</p> <p>&quot;<strong>error</strong>&quot;:&quot;&quot;,</p> <p>&quot;<strong>hash</strong>&quot;:&quot;\&quot;b2e18e821063c7713e497dd0c9a6a7e3\&quot;&quot;,</p> <p>&quot;<strong>code</strong>&quot;:0,</p> <p>&quot;<strong>key</strong>&quot;:&quot;ZGRhc2U6ZGRhc2VhYzRlZjIyOGQxNDQ0MDRiYmM5ZDYyNzE2ZWU5M2ZhNjA=&quot;},</p> <p>{&quot;<strong>cmd</strong>&quot;:&quot;thumb/0/700/800/png/75&quot;,</p> <p>&quot;<strong>desc</strong>&quot;:&quot;success&quot;,</p> <p>&quot;<strong>error</strong>&quot;:&quot;&quot;,</p> <p>&quot;<strong>hash</strong>&quot;:&quot;\&quot;ab63afa8d90fc944ed437d91d8d10b81\&quot;&quot;,</p> <p>&quot;<strong>code</strong>&quot;:0,</p> <p>&quot;<strong>key</strong>&quot;:&quot;ZGRhc2U6ZGRhc2U2YjIyOGQ0MWZjZmQ0NTllOGQ2OTRkYTgzNDJmYjkyYzA=&quot;},</p> <p>{&quot;<strong>cmd</strong>&quot;:&quot;imageslim&quot;,</p> <p>&quot;<strong>desc</strong>&quot;:&quot;success&quot;,</p> <p>&quot;<strong>error</strong>&quot;:&quot;&quot;,</p> <p>&quot;<strong>hash</strong>&quot;:&quot;\&quot;4e3cd2637001ce77d95928a0e961548f\&quot;&quot;,</p> <p>&quot;<strong>code</strong>&quot;:0,</p> <p>&quot;<strong>key</strong>&quot;:&quot;ZGRhc2U6ZGRhc2U0MTcwZWQ0NDc4NzU0NzNkYjUwM2Q5NzU2OTUxN2Y5NTA=&quot;</p> <p>}],</p> <p>&quot;<strong>inputKey</strong>&quot;:&quot;1222_1-test&quot;,</p> <p>&quot;<strong>inputBucket</strong>&quot;:&quot;ddase&quot;,</p> <p>&quot;<strong>code</strong>&quot;:0,</p> <p>&quot;<strong>notifyResponseCode</strong>&quot;:200</p> <p>}</p> </td> <td> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> <td> <p>参照父类PutObjectResult参数说明</p> </td> </tr> </tbody> </table> <p>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</p> </td> <td> <p>请参照父类S3Object的参数说明</p> </td> </tr> </tbody> </table> <p>&nbsp;</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&lt;S3Object&gt;</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>
以上内容是否解决了您的问题?
请补全提交信息!
联系我们

电话咨询

400-151-8800

邮件咨询

fincloud@ocft.com

在线客服

工单支持

解决云产品相关技术问题