文档

同步处理

更新时间:

同步处理(x-oss-process)适用于可以快速返回结果的场景,例如图片处理、文档处理、媒体处理、图片智能等。本文介绍如何使用文件URL、API和SDK等方式对存储于对象存储OSS中的文件进行同步处理。

支持的处理操作

功能

说明

操作名称

相关文档

图片处理

图片缩放、图片水印等。

x-oss-process=image/*

说明

*替换为对应的处理参数。

处理参数

文档处理

文档在线预览、文档在线编辑、文档快照。

x-oss-process=doc/*

媒体处理

视频信息提取、音频信息提取。

  • 视频:x-oss-process=video/*

  • 音频:x-oss-process=audio/*

图片智能

人脸检测、人体检测等。

x-oss-process=image/*

图片智能概述

操作步骤

使用文件URL

您可以在文件URL中通过添加处理参数来处理文件。

  • 对于允许匿名访问的公共读或者公共读写文件,可以直接在文件URL中通过添加处理参数的方式处理文件。对于不允许匿名访问的私有文件,需要通过SDK的方式将处理操作加入签名URL中。

  • 目前文档处理不支持匿名访问。

  • 通过文件URL访问图片时,默认是下载行为。如需确保通过文件URL访问图片时是预览行为,您需要绑定自定义域名并添加CNAME记录。具体操作,请参见绑定自定义域名至Bucket默认域名

添加处理参数

  • 公共读或者公共读写文件

    • 处理URL:https://bucketname.endpoint/objectname?x-oss-process=mediatype/action,parame_value

    • 参数说明

      参数

      说明

      示例

      http(s)://bucketname.endpoint/objectname

      文件的访问地址。获取方式,请参见如何获取单个或多个文件的URL?

      https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_300/quality,q_90

      x-oss-process=mediatype/

      固定参数,表示使用处理参数对文件进行处理。

      mediatype取值:

      • image:图片。

      • doc:文档。

      action,parame_value

      定义处理的方式,包括处理的操作(action)、参数(parame)和值(value)。

      说明

      多个操作以正斜线(/)隔开,OSS将按处理参数的顺序处理文件。例如image/resize,w_200/rotate,90表示将图片先按比例缩放至宽200 px,再将图片旋转90°。

  • 私有文件

    私有文件需要通过SDK生成带处理参数的文件签名URL。以下仅列举常见SDK的生成带图片处理参数的文件签名URL的代码示例。关于其他SDK生成带处理参数的文件签名URL的代码示例,请参见SDK简介

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.model.GeneratePresignedUrlRequest;
    import java.net.URL;
    import java.util.Date;
    
    public class Demo {
        public static void main(String[] args) throws Throwable {
            // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 强烈建议不要把访问凭证保存到工程代码里,否则可能导致访问凭证泄露,威胁您账号下所有资源的安全。本代码示例以从环境变量中获取访问凭证为例。运行本代码示例之前,请先配置环境变量。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // 填写Bucket名称,例如examplebucket。
            String bucketName = "examplebucket";
            // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
            String objectName = "exampleobject.jpg";
    
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                // 将图片缩放为固定宽高100 px后,再旋转90°。
                String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
                // 指定签名URL过期时间为10分钟。
                Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 );
                GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
                req.setExpiration(expiration);
                req.setProcess(style);
                URL signedUrl = ossClient.generatePresignedUrl(req);
                System.out.println(signedUrl);
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\OssClient;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    $accessKeyId = getenv("OSS_ACCESS_KEY_ID");
    $accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    $endpoint = "yourEndpoint";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    // 填写Object完整路径,例如exampledir/exampleobject.jpg。Object完整路径中不能包含Bucket名称。
    $object = "exampledir/exampleobject.jpg";
    
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
    
    // 生成一个带图片处理参数的签名的URL,有效期是3600秒,可以直接使用浏览器访问。
    $timeout = 3600;
    
    $options = array(
        // 将图片缩放为固定宽高100 px。
        OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100" );
    
    $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
    print("rtmp url: \n" . $signedUrl);           
    const OSS = require('ali-oss');
    
    const client = new OSS({
       // 填写Bucket名称,例如examplebucket。
      bucket: 'examplebucket',
      // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
      region: 'oss-cn-hangzhou',
      // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
      accessKeyId: process.env.OSS_ACCESS_KEY_ID,
      accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
    });
    // 指定签名URL过期时间为10分钟,将图片缩放为固定宽300 px。
    let signUrl = client.signatureUrl('example.jpg', {expires: 600, 'process' : 'image/resize,w_300'});
    console.log("signUrl="+signUrl);
    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    # 填写Bucket名称,例如examplebucket。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    # 指定图片所在Bucket的名称。如果图片不在Bucket根目录,需携带文件完整路径,例如exampledir/example.jpg。
    key = 'oss.png'
    
    # 将图片缩放为固定宽高100 px后,再旋转90°。
    style = 'image/resize,m_fixed,w_100,h_100/rotate,90'
    # 生成带签名的URL,并指定过期时间为10分钟。过期时间单位为秒。
    url = bucket.sign_url('GET', key, 10 * 60, params={'x-oss-process': style})
    print(url)
    using Aliyun.OSS;
    using Aliyun.OSS.Common;
    
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    var endpoint = "yourEndpoint";
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
    var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
    // 指定图片所在Bucket的名称,例如examplebucket。
    var bucketName = "examplebucket";
    // 指定图片名称。如果图片不在Bucket根目录,需携带文件完整路径,例如exampledir/example.jpg。
    var objectName = "exampledir/exampledir.jpg";
    // 创建OSSClient实例。
    var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
    try
    {
        // 将图片缩放为固定宽高100 px。
        var process = "image/resize,m_fixed,w_100,h_100";
        var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get)
        {
            Expiration = DateTime.Now.AddHours(1),
            Process = process
        };
        // 生成带有签名的URI。
        var uri = client.GeneratePresignedUri(req);
        Console.WriteLine("Generate Presigned Uri:{0} with process:{1} succeeded ", uri, process);
    }
    catch (OssException ex)
    {
        Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
            ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Failed with error info: {0}", ex.Message);
    }
    package main
    
        import (
            "fmt"
            "os"
            "github.com/aliyun/aliyun-oss-go-sdk/oss"
        )
    
    func main() {
        /// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        provider, err := oss.NewEnvironmentVariableCredentialsProvider()
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
    
        // 创建OSSClient实例。
        // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
        client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
    
        // 指定图片所在Bucket的名称,例如examplebucket。
        bucketName := "examplebucket"
        bucket, err := client.Bucket(bucketName)
        if err != nil {
        HandleError(err)
        }
        // 指定图片名称。如果图片不在Bucket根目录,需携带文件完整路径,例如exampledir/example.jpg。
        ossImageName := "exampledir/example.jpg"
        // 生成带签名的URL,并指定过期时间为600s。
        signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 600, oss.Process("image/format,png"))
        if err != nil {
        HandleError(err)
        } else {
        fmt.Println(signedURL)
        }
    }
    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* 初始化OSS账号信息。*/
                
        /* 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
        std::string Endpoint = "yourEndpoint";
        /* 填写图片所在的Bucket名称,例如examplebucket。*/
        std::string BucketName = "examplebucket";
        /* 指定图片名称。如果图片不在Bucket根目录,需携带文件完整路径,例如exampledir/example.jpg。
        std::string ObjectName = "exampledir/example.jpg";
    
          /* 初始化网络等资源。*/
        InitializeSdk();
    
        ClientConfiguration conf;
        /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
        auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
        OssClient client(Endpoint, credentialsProvider, conf);
    
    
        /* 生成带图片处理参数的文件签名URL。*/
        std::string Process = "image/resize,m_fixed,w_100,h_100";
        GeneratePresignedUrlRequest request(BucketName, ObjectName, Http::Get);
        request.setProcess(Process);
        auto outcome = client.GeneratePresignedUrl(request);
    
        /* 释放网络等资源。*/
        ShutdownSdk();
        return 0;
    }
    #include "oss_api.h"
    #include "aos_http_io.h"
    /* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
    const char *endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    
    /* 填写Bucket名称,例如examplebucket。*/
    const char *bucket_name = "examplebucket";
    /* 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/example.jpg。*/
    const char *object_name = "exampledir/example.jpg";
    void init_options(oss_request_options_t *options)
    {
        options->config = oss_config_create(options->pool);
        /* 用char*类型的字符串初始化aos_string_t类型。*/
        aos_str_set(&options->config->endpoint, endpoint);
        /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/    
        aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
        aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
        /* 是否使用了CNAME。0表示不使用。*/
        options->config->is_cname = 0;
        /* 设置网络相关参数,比如超时时间等。*/
        options->ctl = aos_http_controller_create(options->pool, 0);
    }
    int main(int argc, char *argv[])
    {
        /* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/
        if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
            exit(1);
        }
        /* 用于内存管理的内存池(pool),等价于apr_pool_t。其实现代码在apr库中。*/
        aos_pool_t *pool;
        /* 重新创建一个内存池,第二个参数是NULL,表示没有继承其它内存池。*/
        aos_pool_create(&pool, NULL);
        /* 创建并初始化options,该参数包括endpoint、access_key_id、acces_key_secret、is_cname、 curl等全局配置信息。*/
        oss_request_options_t *oss_client_options;
        /* 在内存池中分配内存给options。*/
        oss_client_options = oss_request_options_create(pool);
        /* 初始化Client的选项oss_client_options。*/
        init_options(oss_client_options);
        /* 初始化参数。*/
        aos_string_t bucket;
        aos_string_t object;
        aos_table_t *params = NULL;
        aos_http_request_t *req;
        char *url_str;
        apr_time_t now;
        int64_t expire_time; 
        aos_str_set(&bucket, bucket_name);
        aos_str_set(&object, object_name);
        /* 将图片缩放为固定宽高100 px。*/
        params = aos_table_make(pool, 1);
        apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100");
        req = aos_http_request_create(pool);
        req->method = HTTP_GET;
        req->query_params = params;
        /* 指定过期时间(expire_time),单位为秒。*/
        now = apr_time_now();
        expire_time = now / 1000000 + 10 * 60;
        /* 生成签名URL。*/
        url_str = oss_gen_signed_url(oss_client_options, &bucket, &object, expire_time, req);
        printf("url: %s\n", url_str);
        /* 释放该内存池,相当于释放了请求过程中各资源分配的内存。*/
        aos_pool_destroy(pool);
        /* 释放之前分配的全局资源。*/
        aos_http_io_deinitialize();
        return 0;
    }

添加样式参数

使用SDK

您可以通过在SDK中添加处理参数添加样式参数的方式来处理文件。

添加处理参数

通过添加处理参数的方式处理文件时,多个处理参数之间需要以正斜线(/)分隔。

以下仅列举常见的SDK使用图片处理参数处理图片的代码示例,关于其他SDK的使用处理参数处理文件的代码示例,请参见简介

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 强烈建议不要把访问凭证保存到工程代码里,否则可能导致访问凭证泄露,威胁您账号下所有资源的安全。本代码示例以从环境变量中获取访问凭证为例。运行本代码示例之前,请先配置环境变量。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
        String objectName = "exampleobject.jpg";
        // 填写本地文件的完整路径,例如D:\\localpath\\example-new.jpg。如果指定的本地文件存在会覆盖,不存在则新建。
        String pathName = "D:\\localpath\\example-new.jpg";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 将图片缩放为固定宽高100 px后,再旋转90°。
            String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
            request.setProcess(style);
            // 将处理后的图片命名为example-new.jpg并保存到本地。
            // 如果未指定本地路径只填写了文件名称(例如example-new.jpg),则文件默认保存到示例程序所属项目对应本地路径中。
            ossClient.getObject(request, new File("D:\\localpath\\example-new.jpg"));
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;

// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
// 填写Object完整路径,例如exampledir/exampleobject.jpg。Object完整路径中不能包含Bucket名称。
$object = "exampledir/exampleobject.jpg";
// 填写本地文件的完整路径,例如D:\\localpath\\example-new.jpg。如果指定的本地文件存在会覆盖,不存在则新建。
// 如果未指定本地路径只填写了本地文件名称(例如example-new.jpg),则文件默认保存到示例程序所属项目对应本地路径中。
$download_file = "D:\\localpath\\example-new.jpg";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
// 如果目标图片不在指定Bucket中,需上传图片到目标Bucket。
// $ossClient->uploadFile($bucket, $object, "D:\\localpath\\exampleobject.jpg");

// 将图片缩放为固定宽高100 px后,再旋转90°。
$style = "image/resize,m_fixed,w_100,h_100/rotate,90";

$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => $style);

// 将处理后的图片命名为example-new.jpg并保存到本地。
$ossClient->getObject($bucket, $object, $options);

// 图片处理完成后,如果Bucket中的原图不再需要,可以删除原图。
// $ossClient->deleteObject($bucket, $object);                              
              # -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。
key = 'exampledir/example.jpg'
# 指定处理后的图片名称。
new_pic = 'exampledir/newexample.jpg'

# 将图片缩放为固定宽高100 px后,再旋转90°,之后保存至本地。
style = 'image/resize,m_fixed,w_100,h_100/rotate,90'
bucket.get_object_to_file(key, new_pic, process=style)
# 图片处理完成后,若Bucket内的原图不再需要,可以删除原图。
# bucket.delete_object(key)
# 如果处理后的图片不再需要,可以删除处理后的图片。
# os.remove(new_pic)        
using System;
using System.IO;
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;
namespace ImageProcessCascade
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.ImageProcessCascade();
            Console.ReadKey();
        }
        public static void ImageProcessCascade()
        {
            // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
            var endpoint = "yourEndpoint";
            // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
            var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
            var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
            // 指定原图所在的Bucket名称,例如examplebucket。
            var bucketName = "examplebucket";
            // 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。
            var objectName = "exampledir/example.jpg";
            // 指定原图所在的本地完整路径。
            // var localImageFilename = "D:\\localpath\\example.jpg";
            // 指定保存处理后的图片的本地文件夹。
            var downloadDir = "yourDownloadDir";
            // 创建OssClient实例。
            var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
            try
            {
                // 如果原图不在目标Bucket内,需上传该图片到目标Bucket。   
                // client.PutObject(bucketName, objectName, localImageFilename);
                // 将图片缩放为固定宽高100 px后,再旋转90°。
                var process = "image/resize,m_fixed,w_100,h_100/rotate,90";
                var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                // 指定处理后的图片名称。
                WriteToFile(downloadDir + "/yourLocalFilename", ossObject.Content);
                Console.WriteLine("Get Object:{0} with process:{1} succeeded ", objectName, process);
            }
            catch (OssException ex)
            {
                Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
        private static void WriteToFile(string filePath, Stream stream)
        {
            using (var requestStream = stream)
            {
                using (var fs = File.Open(filePath, FileMode.OpenOrCreate))
                {
                    IoUtils.WriteTo(stream, fs);
                }
            }
        }
    }
}
package main

    import (
        "fmt"
        "os"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
    )

func main() {
    /// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 指定原图所在的Bucket名称,例如examplebucket。
    bucketName := "examplebucket"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
    HandleError(err)
     }

    // 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。
    sourceImageName := "exampledir/example.jpg"
    // 指定处理后的图片名称。
    targetImageName := "exampledir/newexample.jpg"
    // 将图片缩放为固定宽高100 px后,再旋转90°,之后保存至本地。
    style := "image/resize,m_fixed,w_100,h_100/rotate,90"
    err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
    if err != nil {
     HandleError(err)
    }
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* 初始化OSS账号信息。*/
            
    /* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    /* 指定原图所在的Bucket名称,例如examplebucket。*/
    std::string BucketName = "examplebucket";
    /* 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。*/
    std::string ObjectName = "exampledir/example.jpg";

     /* 初始化网络等资源。*/
    InitializeSdk();

    ClientConfiguration conf;
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* 将图片缩放为固定宽高100 px后,再旋转90°,之后保存在本地。*/
    std::string Process = "image/resize,m_fixed,w_100,h_100/rotate,90";
    GetObjectRequest request(BucketName, ObjectName);
    request.setProcess(Process);
    auto outcome = client.GetObject(request);

    /* 释放网络等资源。*/
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

/* 填写Bucket名称,例如examplebucket。*/
const char *bucket_name = "examplebucket";
/* 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。*/
const char *object_name = "exampledir/exampleobject.txt";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* 用char*类型的字符串初始化aos_string_t类型。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/    
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    /* 是否使用了CNAME。0表示不使用。*/
    options->config->is_cname = 0;
    /* 用于设置网络相关参数,比如超时时间等。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* 用于内存管理的内存池(pool),等价于apr_pool_t。其实现代码在apr库中。*/
    aos_pool_t *pool;
    /* 重新创建一个内存池,第二个参数是NULL,表示没有继承其它内存池。*/
    aos_pool_create(&pool, NULL);
    /* 创建并初始化options,该参数包括endpoint、access_key_id、acces_key_secret、is_cname、 curl等全局配置信息。*/
    oss_request_options_t *oss_client_options;
    /* 在内存池中分配内存给options。*/
    oss_client_options = oss_request_options_create(pool);
    /* 初始化Client的选项oss_client_options。*/
    init_options(oss_client_options);
    /* 初始化参数。*/
    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;
    aos_table_t *headers = NULL;
    aos_table_t *params = NULL;
    aos_table_t *resp_headers = NULL;
    aos_status_t *resp_status = NULL;
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    /* 将图片缩放为固定宽高100 px后,再旋转90°。*/
    params = aos_table_make(pool, 1);
    apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100/rotate,90");
    /* 将处理后的图片保存到本地。*/
    aos_str_set(&file, "LocalFileName");
    resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("get object to file succeeded\n");
    } else {
        printf("get object to file failed\n");  
    }
    /* 释放内存池,相当于释放了请求过程中各资源分配的内存。*/
    aos_pool_destroy(pool);
    /* 释放之前分配的全局资源。*/
    aos_http_io_deinitialize();
    return 0;
}
OSSGetObjectRequest * request = [OSSGetObjectRequest new];
// 填写图片所在Bucket的名称。
request.bucketName = @"examplebucket";
// 填写图片名称。如果图片不在Bucket根目录,需携带文件完整路径,例如exampledir/example.jpg。   
request.objectKey = @"exampledir/example.jpg";
// 图片处理。
request.xOssProcess = @"image/resize,m_lfit,w_100,h_100";
OSSTask * getTask = [client getObject:request];
[getTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"download image success!");
        OSSGetObjectResult * getResult = task.result;
        NSLog(@"download image data: %@", getResult.dowloadedData);
    } else {
        NSLog(@"download object failed, error: %@" ,task.error);
    }
    return nil;
}];
// [getTask waitUntilFinished];
// [request cancel];
// 构造图片下载请求。
// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
GetObjectRequest get = new GetObjectRequest("examplebucket", "exampledir/exampleobject.txt");

// 图片处理。
request.setxOssProcess("image/resize,m_fixed,w_100,h_100");

OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
    @Override
    public void onSuccess(GetObjectRequest request, GetObjectResult result) {
        // 请求成功。
        InputStream inputStream = result.getObjectContent();

        byte[] buffer = new byte[2048];
        int len;

        try {
            while ((len = inputStream.read(buffer)) != -1) {
                // 处理下载的数据。
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // 处理异常,用户可自行填写。
    }
});

添加样式参数

您可以通过样式将多个处理参数封装在一个样式中,然后使用样式处理文件。

以下仅列举常见的SDK使用图片样式参数处理图片的代码示例,关于其他SDK的使用样式参数处理文件的代码示例,请参见简介

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 强烈建议不要把访问凭证保存到工程代码里,否则可能导致访问凭证泄露,威胁您账号下所有资源的安全。本代码示例以从环境变量中获取访问凭证为例。运行本代码示例之前,请先配置环境变量。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
        String objectName = "exampleobject.jpg";
        // 填写本地文件的完整路径,例如D:\\localpath\\example-new.jpg。如果指定的本地文件存在会覆盖,不存在则新建。
        String pathName = "D:\\localpath\\example-new.jpg";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 使用自定义样式处理图片。
            // yourCustomStyleName填写通过OSS管理控制台创建的图片样式名称。
            String style = "style/yourCustomStyleName";
            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
            request.setProcess(style);
            // 将处理后的图片命名为example-new.jpg并保存到本地。
            // 如果未指定本地路径只填写了文件名称(例如example-new.jpg),则文件默认保存到示例程序所属项目对应本地路径中。
            ossClient.getObject(request, new File(pathName));
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
// 填写Object完整路径,例如exampledir/exampleobject.jpg。Object完整路径中不能包含Bucket名称。
$object = "exampledir/exampleobject.jpg";
// 填写本地文件的完整路径,例如D:\\localpath\\example-new.jpg。如果指定的本地文件存在会覆盖,不存在则新建。
// 如果未指定本地路径只填写了本地文件名称(例如example-new.jpg),则文件默认保存到示例程序所属项目对应本地路径中。
$download_file = "D:\\localpath\\example-new.jpg";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

// 如果目标图片不在指定Bucket中,需上传图片到目标Bucket。
// $ossClient->uploadFile($bucket, $object, "D:\\localpath\\exampleobject.jpg");

// 使用自定义样式处理图片。
// yourCustomStyleName填写通过OSS管理控制台创建的图片样式名称。
$style = "style/yourCustomStyleName";

$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => $style);

// 将处理后的图片命名为example-new.jpg并保存到本地。
$ossClient->getObject($bucket, $object, $options);

// 图片处理完成后,如果Bucket中的原图不再需要,可以删除原图。
// $ossClient->deleteObject($bucket, $object);                              
const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // 填写存储空间名称。
  bucket: 'yourbucketname'
});
// 自定义样式。
async function style () {
  try {
    let result = await client.get('example.jpg', './example-custom-style.jpg', {process: 'style/example-style"'});
  } catch (e) {
    console.log(e);
  }
}
style();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。
key = 'exampledir/example.jpg'
# 指定处理后的图片名称。
new_pic = 'exampledir/newexample.jpg'

# 使用自定义样式处理图片。其中,yourCustomStyleName填写通过OSS管理控制台创建的图片样式名称。
style = 'yourCustomStyleName'
# 将处理后的图片保存在本地。
bucket.get_object_to_file(key, new_pic, process=style)
# 图片处理完成后,如果Bucket内的原图不再需要,可将其删除。
# bucket.delete_object(key)
# 如果处理后的图片不再需要,可将其删除。
# os.remove(new_pic)
using System;
using System.IO;
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;
namespace ImageProcessCustom
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.ImageProcessCustomStyle();
            Console.ReadKey();
        }
        public static void ImageProcessCustomStyle()
        {
            // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
            var endpoint = "yourEndpoint";
            // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
            var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
            var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
            // 指定原图所在的Bucket名称,例如examplebucket。
            var bucketName = "examplebucket";
            // 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。
            var objectName = "exampledir/example.jpg";
            // 指定原图所在的本地完整路径。
            // var localImageFilename = "D:\\localpath\\example.jpg";
            // 指定保存处理后的图片的本地文件夹。
            var downloadDir = "yourDownloadDir";
            // 创建OssClient实例。
            var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
            try
            {
                // 如果原图不在目标Bucket内,需上传该图片到目标Bucket。   
                // client.PutObject(bucketName, objectName, localImageFilename);
                // 使用图片样式处理图片。其中,yourCustomStyleName填写通过OSS管理控制台创建的图片样式名称。
                var process = "style/yourCustomStyleName";
                var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                // 指定处理后的图片名称。            
                WriteToFile(downloadDir + "/yourLocalFilename", ossObject.Content);
                Console.WriteLine("Get Object:{0} with process:{1} succeeded ", objectName, process);
            }
            catch (OssException ex)
            {
                Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
        private static void WriteToFile(string filePath, Stream stream)
        {
            using (var requestStream = stream)
            {
                using (var fs = File.Open(filePath, FileMode.OpenOrCreate))
                {
                    IoUtils.WriteTo(stream, fs);
                }
            }
        }
    }
}
package main

    import (
        "fmt"
        "os"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
    )

func main() {
    /// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 创建OSSClient实例。
    // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 指定原图所在的Bucket名称,例如examplebucket。
    bucketName := "examplebucket"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
     HandleError(err)
    }
    // 指定原图名称。如果图片不在Bucket根目录,需携带文件完整路径,例如example/example.jpg。
    sourceImageName := "example/example.jpg"
    // 将处理后的图片命名为newexample.jpg并保存到本地。
    targetImageName := "D:\\localpath\\newexample.jpg"
    // 使用图片样式处理图片。其中,yourCustomStyleName填写通过OSS管理控制台创建的图片样式名称。
    style := "style/yourCustomStyleName"
    // 将处理后的图片保存在本地。
    err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
    if err != nil {
    HandleError(err)
    }
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
     /* 初始化OSS账号信息。*/
    
     /* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
     std::string Endpoint = "yourEndpoint";
     /* 指定原图所在的Bucket名称,例如examplebucket。*/
     std::string BucketName = "examplebucket";
     /* 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。*/
     std::string ObjectName = "exampledir/example.jpg";

     /* 初始化网络等资源。*/
    InitializeSdk();

    ClientConfiguration conf;
    /*从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* 使用图片样式处理图片。其中,yourCustomStyleName填写通过OSS管理控制台创建的图片样式名称。*/
    std::string Process = "style/yourCustomStyleName";
    GetObjectRequest request(BucketName, ObjectName);
    request.setProcess(Process);
    auto outcome = client.GetObject(request);

    /* 释放网络等资源。*/
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

/* 填写Bucket名称,例如examplebucket。*/
const char *bucket_name = "examplebucket";
/* 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。*/
const char *object_name = "exampledir/exampleobject.txt";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* 用char*类型的字符串初始化aos_string_t类型。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/    
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    /* 是否使用了CNAME。0表示不使用。*/
    options->config->is_cname = 0;
    /* 用于设置网络相关参数,比如超时时间等。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* 用于内存管理的内存池(pool),等价于apr_pool_t。其实现代码在apr库中。*/
    aos_pool_t *pool;
    /* 重新创建一个内存池,第二个参数是NULL,表示没有继承其它内存池。*/
    aos_pool_create(&pool, NULL);
    /* 创建并初始化options,该参数包括endpoint、access_key_id、acces_key_secret、is_cname、 curl等全局配置信息。*/
    oss_request_options_t *oss_client_options;
    /* 在内存池中分配内存给options。*/
    oss_client_options = oss_request_options_create(pool);
    /* 初始化Client的选项oss_client_options。*/
    init_options(oss_client_options);
    /* 初始化参数。*/
    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;
    aos_table_t *headers = NULL;
    aos_table_t *params = NULL;
    aos_table_t *resp_headers = NULL;
    aos_status_t *resp_status = NULL;
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    /* 指定图片样式。*/
    params = aos_table_make(pool, 1);
    apr_table_set(params, OSS_PROCESS, "style/<yourCustomStyleName>");
    /* 将处理后的图片保存到本地。*/
    aos_str_set(&file, "<LocalFileName>");
    resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("get object to file succeeded\n");
    } else {
        printf("get object to file failed\n");  
    }
    /* 释放内存池,相当于释放了请求过程中各资源分配的内存。*/
    aos_pool_destroy(pool);
    /* 释放之前分配的全局资源。*/
    aos_http_io_deinitialize();
    return 0;
}

使用REST API

如果对程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。具体操作,请参见签名版本1

您可以通过在GetObject接口中添加处理参数或样式参数的方式来处理文件。更多信息,请参见GetObject

处理示例

  • 添加图片处理参数

    GET /oss.jpg?x-oss-process=image/resize,w_100 HTTP/1.1
    Host: oss-example.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 28 Oct 2022 06:40:10 GMT
    Authorization: OSS qn6q**************:77Dv****************
  • 添加图片样式参数

    GET /oss.jpg?x-oss-process=style/styleexample HTTP/1.1
    Host: oss-example.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 28 Oct 2022 06:40:10 GMT
    Authorization: OSS qn6q**************:77Dv****************
  • 添加文档在线预览处理参数

    GET /example.docx?x-oss-process=doc/preview,copy_1,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60 HTTP/1.1
    Host: doc-example.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 28 Oct 2022 06:40:10 GMT
    Authorization: OSS qn6q**************:77Dv****************
  • 添加文档在线编辑处理参数

    GET /example.docx?x-oss-process=doc/edit,export_1,print_1/watermark,text_5YaF6YOo6LWE5paZ,size_30,t_60 HTTP/1.1
    Host: doc-example.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 28 Oct 2022 06:40:10 GMT
    Authorization: OSS qn6q**************:77Dv****************

常见问题

同步处理可以同时进行2个操作么?

可以。例如您想同时进行图片缩放和图片水印,可以在原图基础上同时增加缩放和水印的处理参数,从而实现相关操作。更多信息,请参见示例二:添加图片水印

更多参考

关于如何将处理后的文件持久化地保存在OSS中,请参见另存为