对象存储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的命名规范,请参见基本概念

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