集成对象存储OSS

云工作流允许将对象存储 OSS(Object Storage Service)作为流程执行过程中的数据源或者数据存储介质,只需要配置简单的参数,既可实现工作流执行过程中对OSS数据的读写。同时,也支持OSS针对文件(Object)和存储空间(Bucket)的常用操作。本文分文件(Object)操作和存储空间(Bucket)操作两个场景介绍云工作流集成OSS的示例、参数说明以及集成输出。

文件(Object)操作

读取文件

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: GetObject
States:
  - Type: Task
    Name: GetObject
    Action: OSS:GetObject
    TaskMode: RequestComplete
    Description: 读取OSS数据示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
      key: fileKey
      versionId: CAEQMxiBgMCZov2D0BYiIDY4MDllOTc2YmY5MjQxMzdiOGI3OTlhNTU0ODIx**
      range: 1024-
      ifMatch: fba9dede5f27731c9771645a3986
      ifNoneMatch: 5B3C1A2E0563E1B002CC607C
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

bucket

文件所在的Bucket名称。

thebucketname

key

需要被读取的文件key。

mps/test.txt

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

versionId

请求Object的版本号。

CAEQMxiBgMCZov2D0BYiIDY4MDllOTc2YmY5MjQxMzdiOGI3OTlhNTU0ODIx****

range

指定文件传输的范围。

  • 如果指定的范围符合规范,返回消息中会包含整个Object的大小和此次返回Object的范围。

    例如:Content-Range: bytes 0~9/44,表示整个Object大小为44,此次返回的范围为0~9。

  • 如果指定的范围不符合规范,则传送整个Object,并且结果中不包含Content-Range。

默认值:无。

1024~2048或1024~或~2048

ifMatch

如果传入期望的ETag和Object的ETag匹配,则返回200 OK和Object Meta。否则返回412 precondition failed。

默认值:无。

fba9dede5f27731c9771645a3986****

ifNoneMatch

如果传入期望的ETag值和Object的ETag不匹配,则返回200 OK和Object Meta。否则返回304 Not Modified。

默认值:无。

fba9dede5f27731c9771645a3986****

集成输出

{
  "bucket": "thebucketname",
  "key": "map/test.txt",
  "data": "the file content"
}

上传文件

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: PutObject
States:
  - Type: Task
    Name: PutObject
    Action: OSS:PutObject
    TaskMode: RequestComplete
    Description: 写入OSS数据示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
      key: fileKey
      overwrite: true
      data: hello world!!!
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

bucket

文件所在的Bucket名称。

thebucketname

key

需要被读取的文件key。

mps/test.txt

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

data

请求体。

  • 如果是基本类型或者是字符串,则直接写入文件。

  • 如果是结构、数组、map,则先转换为JSON再写入文件。

hello world!!

overwrite

指定PutObject操作时是否覆盖同名Object。 取值说明如下:

  • true:覆盖

  • false:不覆盖

默认值:false。

false

集成输出

{
  "bucket": "thebucketname",
  "key": "map/test.txt"
}

删除文件

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: DeleteObject
States:
  - Type: Task
    Name: DeleteObject
    Action: OSS:DeleteObject
    TaskMode: RequestComplete
    Description: 删除OSS数据示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
      key: fileKey
      versionId: CAEQMxiBgMCZov2D0BYiIDY4MDllOTc2YmY5MjQxMzdiOGI3OTlhNTU0ODIx**
    End: true

示例说明如下。

参数说明

参数

必填

说明

示例

bucket

文件所在的Bucket名称。

thebucketname

key

需要被读取的文件key。

mps/test.txt

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

versionId

请求Object的版本号。

CAEQMxiBgMCZov2D0BYiIDY4MDllOTc2YmY5MjQxMzdiOGI3OTlhNTU0ODIx****

集成输出

{
  "bucket": "thebucketname",
  "key": "map/test.txt"
}

检查某个文件是否存在

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: IsObjectExist
States:
  - Type: Task
    Name: IsObjectExist
    Action: OSS:IsObjectExist
    TaskMode: RequestComplete
    Description: OSS文件是否存在判断
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
      key: fileKey
      versionId: CAEQMxiBgMCZov2D0BYiIDY4MDllOTc2YmY5MjQxMzdiOGI3OTlhNTU0ODIx**
    End: true

示例说明如下。

参数说明

参数

是否必选

说明

示例

bucket

文件所在的Bucket名称。

thebucketname

key

需要被读取的文件key。

mps/test.txt

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

versionId

请求Object的版本号。

CAEQMxiBgMCZov2D0BYiIDY4MDllOTc2YmY5MjQxMzdiOGI3OTlhNTU0ODIx****

集成输出

{
  "bucket": "thebucketname",
  "key": "map/test.txt",
  "exist": true
}

以追加写的方式上传文件

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: AppendObject
States:
  - Type: Task
    Name: AppendObject
    Action: OSS:AppendObject
    TaskMode: RequestComplete
    Description: 追加OSS数据示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
      key: fileKey
      overwrite: true
      data: hello world!!!
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

bucket

文件所在的Bucket名称。

thebucketname

key

需要被读取的文件key。

mps/test.txt

data

请求体。

  • 如果是基本类型或者是字符串,则直接写入文件。

  • 如果是结构、数组、map,则先转换为JSON再写入文件。

hello world!!

集成输出

{
  "bucket": "thebucketname",
  "key": "map/test.txt"
}

获取某个文件的元信息

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: GetObjectMeta
States:
  - Type: Task
    Name: GetObjectMeta
    Action: OSS:GetObjectMeta
    TaskMode: RequestComplete
    Description: 读取OSS元数据示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
      key: fileKey
      versionId: CAEQMxiBgMCZov2D0BYiIDY4MDllOTc2YmY5MjQxMzdiOGI3OTlhNTU0ODIx**
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

bucket

文件所在的Bucket名称。

thebucketname

key

需要被读取的文件key。

mps/test.txt

versionId

请求Object的版本号。

CAEQMxiBgMCZov2D0BYiIDY4MDllOTc2YmY5MjQxMzdiOGI3OTlhNTU0ODIx****

集成输出

{
  "bucket": "thebucketname",
  "key": "map/test.txt",
  "meta": {
    "Content-Length": 1024,
    "ETag": "5B3C1A2E053D763E1B002CC607C5****",
    "x-oss-last-access-time": "Tue, 30 Mar 2021 06:07:48 GMT",
    "Last-Modified": "Fri, 24 Feb 2012 06:07:48 GMT",
    "x-oss-version-id": "CAEQNRiBgIDMh4mD0BYiIDUzNDA4OGNmZjBjYTQ0YmI4Y2I4ZmVlYzJlNGVk****"
  }
}

同Bucket拷贝文件

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: CopyObject
States:
  - Type: Task
    Name: CopyObject
    Action: OSS:CopyObject
    TaskMode: RequestComplete
    Parameters:
      key: src_object_key
      destKey: dest_object_key
      bucket: src-object-bucket
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

key

源Object的名称。

src_object_key

destKey

目的Object的名称。

dest_object_key

bucket

源文件所在的Bucket名称。

src-object-bucket

集成输出

{
    "LastModified": "2024-12-03T05:26:33Z",
    "ETag": "\"5BDE2EE1BB30D362F4F0CF9995BE3273\"",
    "bucket": "src-object-bucket",
    "key": "src_object_key",
    "XMLName": {
        "Space": "",
        "Local": "CopyObjectResult"
    }
}

跨Bucket拷贝文件

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: CopyObject
States:
  - Type: Task
    Name: CopyObject
    Action: OSS:CopyObject
    TaskMode: RequestComplete
    Parameters:
      key: src_object_key
      destKey: dest_object_key
      bucket: src-object-bucket
      destBucket: dest-object-bucket
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

key

源Object的名称。

src_object_key

destKey

目的Object的名称。

dest_object_key

bucket

源文件所在的Bucket名称。

src-object-bucket

destBucket

目的文件所在的Bucket名称。

dest-bucket-name

集成输出

{
    "XMLName": {
        "Space": "",
        "Local": "CopyObjectResult"
    },
    "LastModified": "2024-12-03T05:34:03Z",
    "ETag": "\"5BDE2EE1BB30D362F4F0CF9995BE3273\"",
    "bucket": "src-object-bucket",
    "key": "src_object_key"
}

存储空间(Bucket)操作

列举存储空间中所有文件的信息

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: ListObjects
States:
  - Type: Task
    Name: ListObjects
    Action: OSS:ListObjects
    TaskMode: RequestComplete
    Description: 列举所有文件示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
      key: fileKey
      delimiter: /
      maxKeys: 10
      prefix: test
      startAfter: e
      continuationToken: test1.txt
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

bucket

文件所在的Bucket名称。

thebucketname

delimiter

对Object名字进行分组的字符。所有Object名字包含指定的前缀,第一次出现Delimiter字符之间的Object作为一组元素(即CommonPrefixes)。

默认值:无

/

maxKeys

指定返回Object的最大数。

取值:0~1000

默认值:100

100

prefix

限定返回文件的Key必须以Prefix作为前缀。

  • 参数的长度必须小于1024字节。

  • 使用Prefix查询时,返回的Key中仍会包含Prefix。

如果把Prefix设为某个文件夹名,则列举以此Prefix开头的文件,即该文件夹下递归的所有文件和子文件夹。

在设置Prefix的基础上,将Delimiter设置为正斜线(/)时,返回值就只列举该文件夹下的文件,文件夹下的子文件夹名返回在CommonPrefixes中,子文件夹下递归的所有文件和文件夹不显示。

例如,一个Bucket中有三个Object ,分别为fun/test.jpg、 fun/movie/001.avi和fun/movie/007.avi。若设定Prefix为fun/,则返回三个Object;如果在Prefix设置为fun/的基础上,将Delimiter设置为正斜线(/),则返回fun/test.jpg和fun/movie/。

test

startAfter

设定从Start-after之后按字母排序开始返回Object。

Start-after用来实现分页显示效果,参数的长度必须小于1024字节。

做条件查询时,即使Start-after在列表中不存在,也会从符合Start-after字母排序的下一个开始打印。

e

continuationToken

指定list操作需要从此Token开始。您可以从结果中的NextContinuationToken获取此Token。

test1.txt

集成输出

{
  "bucket": "thebucketname",
  "ContinuationToken": "filea",
  "NextContinuationToken": "filez",
  "Objects": [{
    "Key": "file1",
    "Size": 1024,
    "ETag": "CAEQNRiBgIDMh4mD0BYiIDUzNDA4OGNmZjBjYTQ0YmI4Y2I4ZmVlYzJlNGVk****",
    "LastModified": "Fri, 24 Feb 2024 06:07:48 GMT",
    "StorageClass": "Standard"
  }]
}

查看存储空间的相关信息

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: GetBucketInfo
States:
  - Type: Task
    Name: GetBucketInfo
    Action: OSS:GetBucketInfo
    TaskMode: RequestComplete
    Description: 查看存储空间相关信息示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

bucket

文件所在的Bucket名称。

thebucketname

集成输出

{
    "BucketInfo":{
        "XMLName":{
            "Space":"",
            "Local":"Bucket"
        },
        "Name":"testbucketname",
        "AccessMonitor":"Disabled",
        "Location":"oss-cn-hangzhou",
        "CreationDate":"2023-02-07T11:15:10Z",
        "ExtranetEndpoint":"oss-cn-hangzhou.aliyuncs.com",
        "IntranetEndpoint":"oss-cn-hangzhou-internal.aliyuncs.com",
        "ACL":"private",
        "RedundancyType":"LRS",
        "Owner":{
            "XMLName":{
                "Space":"",
                "Local":"Owner"
            },
            "ID":"11111",
            "DisplayName":"11111111"
        },
        "StorageClass":"Standard",
        "SseRule":{
            "XMLName":{
                "Space":"",
                "Local":"ServerSideEncryptionRule"
            },
            "KMSMasterKeyID":"",
            "SSEAlgorithm":"",
            "KMSDataEncryption":""
        },
        "Versioning":"Enabled",
        "TransferAcceleration":"Disabled",
        "CrossRegionReplication":"Disabled"
    },
    "XMLName":{
        "Space":"",
        "Local":"BucketInfo"
    }
}

获取指定存储空间的存储容量以及文件数量

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: GetBucketStat
States:
  - Type: Task
    Name: GetBucketStat
    Action: OSS:GetBucketStat
    TaskMode: RequestComplete
    Description: 查看存储空间相关信息示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

bucket

文件所在的Bucket名称。

thebucketname

集成输出

{
    "ArchiveObjectCount":0,
    "ArchiveRealStorage":0,
    "ArchiveStorage":0,
    "ColdArchiveObjectCount":0,
    "ColdArchiveRealStorage":0,
    "ColdArchiveStorage":0,
    "InfrequentAccessObjectCount":0,
    "InfrequentAccessRealStorage":0,
    "InfrequentAccessStorage":0,
    "LastModifiedTime":1698152609,
    "LiveChannelCount":0,
    "MultipartUploadCount":4,
    "ObjectCount":189,
    "StandardObjectCount":189,
    "StandardStorage": 123123,
    "Storage": 123123,
    "XMLName":{
        "Space":"",
        "Local":"BucketStat"
    }
}

创建一个存储空间

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: CreateBucket
States:
  - Type: Task
    Name: CreateBucket
    Action: OSS:CreateBucket
    TaskMode: RequestComplete
    Description: 创建一个存储空间示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
      acl: private
      storageClass: Standard
      dataRedundancyType: LRS
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

bucket

文件所在的Bucket名称.

thebucketname

acl

指定Bucket的访问权限ACL。包含如下三种访问权限:

  • public-read-write:公共读写

  • public-read:公共读

  • private:私有(默认值)

private

storageClass

Bucket的存储类型。 取值范围如下:

  • Standard(默认):标准存储

  • IA:低频访问

  • Archive:归档存储

  • ColdArchive:冷归档存储

Standard

dataRedundancyType

指定Bucket的数据容灾类型。

  • LRS(默认值)

    本地冗余LRS,将您的数据冗余存储在同一个可用区的不同存储设备上,可支持两个存储设备并发损坏时,仍维持数据不丢失,可正常访问。

  • ZRS

    同城冗余ZRS采用多可用区(AZ)机制,将您的数据冗余存储在同一地域(Region)的3个可用区。可支持单个可用区(机房)整体故障时(例如断电、火灾等),仍然能够保障数据的正常访问。

说明

归档类型的Bucket不支持设置同城冗余。

LRS

集成输出

# 创建一个存储空间的输出为空
{
}

删除存储空间

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: DeleteBucket
States:
  - Type: Task
    Name: DeleteBucket
    Action: OSS:DeleteBucket
    TaskMode: RequestComplete
    Description: 删除存储空间示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

bucket

文件所在的Bucket名称。

thebucketname

集成输出

# 删除一个存储空间的输出为空
{
}

列举请求者拥有的所有存储空间

集成示例

Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: ListBuckets
States:
  - Type: Task
    Name: ListBuckets
    Action: OSS:ListBuckets
    TaskMode: RequestComplete
    Description: 列举请求者拥有的所有存储空间示例
    Parameters:
      region: cn-hangzhou
      bucket: thebucketname
    End: true

示例解析如下。

参数说明

参数

是否必选

说明

示例

region

存储空间所在的地域。默认为当前流程所在的地域。

cn-hangzhou

prefix

限定返回的Bucket名称必须以prefix作为前缀。如果不设定,则不过滤前缀信息。

默认值:无

prefix

marker

设定结果从marker之后按字母排序的第一个开始返回。如果不设定,则从头开始返回数据。

默认值:无

mybucket10

maxKeys

限定此次返回Bucket的最大个数。

取值范围:1~1000

默认值:100

10

集成输出

{
    "Buckets":[
        {
            "XMLName":{
                "Space":"",
                "Local":"Bucket"
            },
            "Name":"bucket1",
            "Location":"oss-cn-shanghai",
            "CreationDate":"2023-07-27T10:49:37Z",
            "StorageClass":"Standard"
        },
        {
            "XMLName":{
                "Space":"",
                "Local":"Bucket"
            },
            "Name":"bucket2",
            "Location":"oss-cn-shanghai",
            "CreationDate":"2023-09-19T07:26:46Z",
            "StorageClass":"Standard"
        }
    ],
    "IsTruncated":true,
    "Marker":"",
    "MaxKeys":100,
    "NextMarker":"cri-9rbedixxxxum7zxs-registry",
    "Owner":{
        "XMLName":{
            "Space":"",
            "Local":"Owner"
        },
        "ID":"11111111",
        "DisplayName":"1111111111"
    },
    "Prefix":"",
    "XMLName":{
        "Space":"",
        "Local":"ListAllMyBucketsResult"
    }
}