对象存储OSS的图片处理服务默认不保存处理后的图片,您需要在图片处理的请求内添加转存参数,将处理后的图片作为文件(Object)保存至指定的存储空间(Bucket)内。

您可以通过文件URL、SDK、API处理图片,并在处理后将图片保存至OSS中。图片处理操作详情请参见图片处理操作方式

文件URL

通过文件URL处理的图片无法直接保存到指定存储空间,您可以在处理图片后,将图片保存到本地,之后再上传至指定存储空间。

SDK

通过SDK处理图片时,您可以通过ImgSaveAs接口将图片保存至原图片所在存储空间。以Java SDK为例,代码如下:
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
String sourceImage = "<yourSourceImageName>";
// 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
    // 将图片缩放为固定宽高100 px。
    StringBuilder sbStyle = new StringBuilder();
    Formatter styleFormatter = new Formatter(sbStyle);
    String styleType = "image/resize,m_fixed,w_100,h_100";
    String targetImage = "<targetImageName>";
    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();
更多语言的SDK demo请参见:

API

您可以使用PostObject接口来调用图片处理服务,并在图片处理请求中增加saveas参数,将处理后的图片另存为OSS文件。其中x-oss-process后面的参数与使用queryString来调用图片处理功能的参数一致。

saveas参数如下:
参数 含义
o 目标Object名称,参数需经过URL Safe的Base64编码。详情请参见水印编码
b 目标Bucket名称,参数需经过URL Safe的Base64编码。如果不指定目标Bucket,则默认保存到当前Bucket。
示例:将目标图片缩放之后保存到名称为test的Bucket,Object名称为test.jpg
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****=

x-oss-process=image/resize,w_100|sys/saveas,o_dGVzdC5qcGc,b_dGVzdA

若使用样式参数处理图片,则将image/resize,w_100内容替换为style/stylename

注意事项

  • 进行图片转存操作需要具有目标Bucket和Object的写权限。
  • 图片转存操作调用的是ImgSaveAs接口,您必须具有oss:PostProcessTask权限才可以执行此操作。详情请参见基于RAM Policy的权限控制
  • 目标Bucket和Object的名称需满足OSS的命名规范。
  • 图片转存操作的目标Bucket需和当前Bucket位于同一个地域。
  • 图片转存操作只能在PostObject操作中执行,不能在Get操作中执行。