对象存储OSS的图片处理服务默认不保存处理后的图片,您需要在图片处理的请求内添加转存参数,将处理后的图片作为文件(Object)保存至指定的存储空间(Bucket)内。
注意事项
- 权限要求
进行图片转存操作要求具有源Bucket的
oss:PostProcessTask
权限,以及目标Bucket的oss:PutBucket
和目标Object的oss:PutObject
权限。 - 存储地域
原图所在Bucket和处理后图片转存的目标Bucket可以相同也可以不同,但必须属于同一账号下的相同地域。
- 转存方式
不支持将文件URL处理后的图片直接保存至指定Bucket。您可以将处理后的图片保存到本地,之后再上传至指定Bucket。
- 转存图片读写权限ACL
转存图片的读写权限ACL默认继承Bucket,不支持自定义。
- 转存图片存储时长
如果您需要控制转存图片的存储时长,请结合生命周期规则配置合理的文件过期策略。
SDK
通过SDK处理图片时,您可以通过
ImgSaveAs接口将处理后的图片保存至指定Bucket。以Java SDK为例,代码如下:
// 目标Bucket所在地域的Endpoint,以华东1(杭州)地域为例。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 String accessKeyId = "YourAccessKeyId"; String accessKeySecret = "YourAccessKeySecret"; // 原图所在Bucket名称。 String bucketName = "SourceBucketName"; // 原图名称。即不包括Bucket名称在内的原图完整访问路径,例如example/image.png。 String sourceImage = "SourceObjectName"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { // 将图片缩放为固定宽高100 px后,存储至目标Bucket。 StringBuilder sbStyle = new StringBuilder(); Formatter styleFormatter = new Formatter(sbStyle); String styleType = "image/resize,m_fixed,w_100,h_100"; String targetImage = "TargetBucketName"; styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType, BinaryUtil.toBase64String(targetImage.getBytes()), BinaryUtil.toBase64String(bucketName.getBytes())); System.out.println(sbStyle.toString()); ProcessObjectRequest request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString()); GenericResult processResult = ossClient.processObject(request); String json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8"); processResult.getResponse().getContent().close(); System.out.println(json); } catch (Exception e) { e.printStackTrace(); } // 关闭OSSClient。 ossClient.shutdown();
Bucket和Object的命名规范,请参见基本概念。
更多语言的SDK demo请参见:
API
使用PostObject接口调用图片处理服务时,通过Body的方式传递x-oss-process。您可以在图片处理请求中增加saveas参数将处理后的图片保存至指定Bucket。
使用
saveas参数时,您需要携带如下选项:
选项 | 含义 |
---|---|
o | 目标Object名称,名称需经过URL Safe的Base64编码。具体操作,请参见水印编码。 |
b | 目标Bucket名称,名称需经过URL Safe的Base64编码。如果不指定目标Bucket,则默认保存至原图所在Bucket。 |
您可以通过以下两种方式处理图片并将图片转存至指定Bucket。
- 使用图片处理参数处理图片并转存至指定Bucket。示例如下:
POST /ObjectName?x-oss-process HTTP/1.1 Host: oss-example.oss.aliyuncs.com Content-Length: 247 Date: Fri, 04 May 2012 03:21:12 GMT Authorization: OSS qn6qrrqxo2oawuk53otf****:KU5h8YMUC78M30dXqf3JxrT****= // 将目标图片test.jpg等比缩放为宽100 px后,保存到名为test的Bucket中。 x-oss-process=image/resize,w_100|sys/saveas,o_dGVzdC5qcGc,b_dGVzdA
- 使用样式处理图片并转存至指定Bucket。示例如下:
POST /ObjectName?x-oss-process HTTP/1.1 Host: oss-example.oss.aliyuncs.com Content-Length: 247 Date: Fri, 04 May 2012 03:22:13 GMT Authorization: OSS qn6qrrqxo2oawuk53otf****:KU5h8YMUC78M30dXqf3JxrT****= // 使用名为examplestyle的样式处理目标图片test.jpg后,保存到名为test的Bucket中。 x-oss-process=style/examplestyle|sys/saveas,o_dGVzdC5qcGc,b_dGVzdA