对象存储

使用方式

2026-01-22 07:37:27

本文帮助您了解如何通过URL和SDK处理图片。

您可以通过URL和SDK两种方式对图片进行处理。

通过URL处理图片

操作场景

开通对象存储ZOS并上传图片后,您可在浏览器地址输入URL处理图片。

通过URL处理图片有两种方式:针对公共读对象,可直接在URL中添加参数处理图片;针对私有对象,通过SDK预签名接口生成URL后拼接图片处理请求。

注意

通过URL访问图片时,浏览器会默认下载图片。

公共读对象

URL格式

https://bucket-name.endpoint/object-name?x-zos-process=image/action,param_value

        https://bucket-name.endpoint:Bucket外网访问地址。其中,bucket-name为桶名,endpoint为桶对应的地域域名。

        object-name:想要访问的图片名称。

        x-zos-process=image/:固定参数,表示该请求是图片处理相关请求。

        action,param_value:图片处理的操作(action)、参数(param)和值(value),用于定义图片处理的方式。多个操作以正斜线(/)隔开,操作后的不同参数通过逗号(,)隔开,参数后接下划线(_)并拼接参数具体的值。ZOS按图片处理参数的顺序处理图片。例如,“image/resize,p_30/rotate,90”表示将图片先按比例缩放至原图的30%,再将图片旋转90°。支持的参数,请参见图片处理参数

示例

https://bucket-test.changsha42.zos.ctyun.cn/test.jpg?x-zos-process=image/resize,w_500,h_500/rotate,180

上述请求会对长沙42资源池的bucket-test桶中的test.jpg图片对象,进行图片处理操作,并将处理后的图片下载到本地。图片处理的具体操作为:首先将图片缩放为500 px*500 px,然后再将其旋转180°。

私有对象

URL格式

通过SDK的generate_presigned_url预签名接口,生成指定对象的get_object访问权限,然后在其生成的URL后面拼接图片处理请求。URL格式为:

http://endpoint/bucketname/objectname?AWSAccessKeyId=xxx&Expires=xxx&Signature=xxx&x-zos-process=image/action,param_value

 http://endpoint/bucketname/objectname?AWSAccessKeyId=xxx&Expires=xxx&Signature=xxx:使用SDK预签名生成的URL。

 x-zos-process=image/:固定参数,表示该请求是图片处理相关请求。

 action,param_value:图片处理的操作(action)、参数(param)和值(value),用于定义图片处理的方式。多个操作以正斜线(/)隔开,操作后的不同参数通过逗号(,)隔开,参数后接下划线(_)并拼接参数具体的值。ZOS按图片处理参数的顺序处理图片。例如,“image/resize,p_30/rotate,90”表示将图片先按比例缩放至原图的30%,再将图片旋转90°。支持的参数,请参见图片处理参数

示例

http://ip:port/bucket/mypic.jpg?AWSAccessKeyId=xxx&Expires=xxx&Signature=xxx&x-zos-process=image/resize,w_500,h_500/rotate,180

上述请求为对bucket桶中的mypic.jpg图片对象进行缩放和旋转操作:首先将图片缩放为500 px*500 px,然后再将其旋转180°。

注意

当前拼接请求操作仅支持v2认证方式,v4认证方式拼接URL后会导致请求失败。具体SDK预签名方式参考对应的SDK开发者文档

通过SDK处理图片

操作场景

您可以通过在SDK中添加参数的方式来处理图片。

示例

以java为例,介绍了图片处理的简单使用方式,更多语言的图片处理SDK请参考开发者文档

import com.amazonaws.ClientConfiguration; 
import com.amazonaws.auth.AWSCredentials;   
import com.amazonaws.auth.AWSStaticCredentialsProvider; 
import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.client.builder.AwsClientBuilder; 
import com.amazonaws.services.s3.AmazonS3;   
import com.amazonaws.services.s3.AmazonS3ClientBuilder; 
import com.amazonaws.Protocol; 
import com.amazonaws.services.s3.model.GetObjectRequest; 
import com.amazonaws.services.s3.model.S3Object; 
import java.io.*; 
import java.util.Base64; 
public class picturedemo { 
    // 访问凭证,填写用户的AK与SK  public static String   ACCESS_KEY = "ACCESS_KEY"; 
    public static String SECRET_KEY =   "SECRET_KEY"; 
    // endpoint为控制台域名信息中的终端节点public static String END_POINT = "END_POINT"; 
    // 填写桶名  public static String BUCKET_NAME =   "BUCKET_NAME"; 
    // 填写待操作图片对象完整路径  public static String   OBJ_KEY = "OBJ_KEY"; 
    // 填写处理后图片对象待保存至本地的路径  public static String   SAVE_PATH = "./test.png"; 
    public static void main(String[]   args) { 
        AmazonS3 s3Client; 
        // 当使用HTTPS协议且采用自签名认证时,需关闭证书检查  //   System.setProperty("com.amazonaws.sdk.disableCertChecking",   "true");  // 使用凭据和配置建立连接  AWSCredentials credentials   = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY); 
        ClientConfiguration   awsClientConfig = new ClientConfiguration();   
        // 使用V2签名时,采用"S3SignerType" 
        awsClientConfig.setSignerOverride("S3SignerType"); 
        // 使用V4签名时,采用"AWSS3V4SignerType"    // awsClientConfig.setSignerOverride("AWSS3V4SignerType");  // 连接默认使用HTTPS协议,使用HTTP协议连接时需要显式指定 
        awsClientConfig.setProtocol(Protocol.HTTP); 
        s3Client =   AmazonS3ClientBuilder.standard() 
                .withCredentials(new   AWSStaticCredentialsProvider(credentials))   
                .withClientConfiguration(awsClientConfig) 
                .withEndpointConfiguration(new   AwsClientBuilder.EndpointConfiguration(END_POINT, "")) 
                .disableChunkedEncoding() 
                .build(); 
        GetObjectRequest request = new   GetObjectRequest(BUCKET_NAME, OBJ_KEY);   
        // 图片处理具体操作,将图片在(10,10)处裁剪300*200大小的矩形,再旋转90°  String imageop =   "image/crop,w_300,h_200,x_10,y_10/rotate,90"; 
        request.setZosProcess(imageop);   
        S3Object result =   s3Client.getObject(request); 
        System.out.print("=====request success=====\n"); 
        // 将下载的图片保存到本地  try { 
            InputStream in =   result.getObjectContent(); 
            File outputFile = new   File(SAVE_PATH); 
            FileOutputStream outputStream   = new 
                    FileOutputStream(outputFile); 
            byte[] read_buf = new   byte[1024 * 1024]; 
            int read_len = 0; 
            while ((read_len =   in.read(read_buf)) > 0) { 
                outputStream.write(read_buf, 0, read_len); 
            } 
            in.close(); 
            outputStream.close(); 
        } catch (IOException e){ 
            e.printStackTrace(); 
        } 
    }   
}
hHypslPWIlee