对象存储服务API桶基础操作详解-桶内对象ListObjects操作如何实现

教程大全 2026-02-18 21:03:29 浏览

对象存储服务API详解

对象存储服务(Object Storage Service,简称OSS)是一种提供海量、安全、低成本、高可靠的云存储服务,在OSS中,桶(Bucket)是存储数据的容器,对象(Object)则是存储的基本单元,本文将详细介绍如何在OSS中使用API列举桶内对象以及进行一些基础操作。

列举桶内对象:ListObjects_

请求路径

使用ListObjects_ API可以列举指定桶内的对象列表,请求路径如下:

GET /?list-type=listObjects&prefix=&delimiter=&max-keys=&marker=&version-id=&encoding-type=

参数说明

请求示例

以下是一个使用Python语言发送ListObjects_ API请求的示例代码:

import requests# 设置请求参数params = {'list-type': 'listObjects','prefix': '','delimiter': '/','max-keys': 100,'marker': '','version-id': '','encoding-type': 'url'}# 设置请求头部headers = {'Host': 'your-bucket-Name.oss-cn-beijing.aliyuncs.com','Authorization': 'your-authorization-token'}# 发送请求response = requests.get('https://your-bucket-name.oss-cn-beijing.aliyuncs.com', params=params, headers=headers)# 解析响应结果print(response.json())

基础操作

创建桶

在OSS中,可以通过API创建一个新的桶,以下是一个使用Python语言创建桶的示例代码:

import requests# 设置请求参数params = {'bucketName': 'your-bucket-name','accessKeyId': 'your-access-key-id','accessKeySecret': 'your-access-key-secret','location': 'oss-cn-beijing'}# 设置请求头部headers = {'Host': 'oss-cn-beijing.aliyuncs.com','Authorization': 'your-authorization-token'}# 发送请求response = requests.put('https://oss-cn-beijing.aliyuncs.com', params=params, headers=headers)# 解析响应结果print(response.json())

上传对象

在OSS中,可以通过API上传对象到指定的桶,以下是一个使用Python语言上传对象的示例代码:

import requests# 设置请求参数params = {'key': 'your-object-key','file': open('your-file-path', 'rb')}# 设置请求头部headers = {'Host': 'your-bucket-name.oss-cn-beijing.aliyuncs.com','Authorization': 'your-authorization-token'}# 发送请求response = requests.put('https://your-bucket-name.oss-cn-beijing.aliyuncs.com', params=params, headers=headers)# 解析响应结果print(response.json())

Q1:如何获取ListObjects_ API的授权令牌?A1:您可以通过阿里云RAM(资源访问管理)或STS(安全令牌服务)获取授权令牌,RAM用户可以在RAM控制台中创建角色,并将访问OSS的权限赋予该角色,您可以使用该角色的AccessKey和AccessKeySecret生成授权令牌。

Q2:如何设置桶的访问权限?A2:您可以在创建桶时设置桶的访问权限,在API请求中,可以通过设置参数来指定桶的访问权限,设置桶为公共读权限,可以使用以下代码:

headers = {'Host': 'oss-cn-beijing.aliyuncs.com','Authorization': 'your-authorization-token','x-oss-acl': 'public-read'}

AWS S3 ListObjectsV2 返回“文件夹”作为对象

在 AWS S3 中,“文件夹”本质上是对象键(Key)中的路径分隔符(/)形成的逻辑结构,并非实际存在的独立实体。 当您使用 ListObjectsV2 API 时,若某个路径下存在以 / 结尾的零长度对象(通常由 S3 控制台或工具自动创建),该对象会被视为“文件夹”并返回在结果中。 以下是详细解释和解决方案:

原因分析 解决方案方法 1:过滤零长度对象

在代码中跳过 Size: 0 的对象,仅处理实际文件:

params := &2Input{Bucket: ((s3_user_bucket)),Prefix: (key + loc[0] + /),}resp, err := 2(params)if err != nil {// 处理错误}var files []stringfor _, obj := range {if * > 0 { // 跳过零长度对象files = append(files, *)}}方法 2:使用 Delimiter 分割公共前缀 对象存储服务API桶操作教程

通过 Delimiter 参数将返回结果分为“文件”和“公共前缀”(模拟子目录),但需注意:

params := &2Input{((s3_user_bucket)),(key + loc[0] + /),Delimiter: (/),}resp, err := 2(params)if err != nil {// 处理错误}// CommonPrefixes 表示子目录(如 [folder1/folder2/folder3/subfolder/])for _, prefix := range {(Subdirectory:, *)}// Contents 仍需过滤零长度对象for _, obj := range {if * > 0 {(File:, *)}}方法 3:删除零长度“文件夹”对象

若不需要逻辑目录,可直接删除这些对象:

_, err := (&{Bucket: ((s3_user_bucket)),(folder1/folder2/folder3/), // 零长度对象的 Key})关键总结

通过以上方法,您可以精准控制 ListObjectsV2 的返回结果,仅处理实际文件对象。

使用 Minio Python SDK 可以操作阿里云 OSS 吗?

使用 Minio Python SDK 无法直接操作阿里云 OSS,主要原因在于两者虽均基于 S3 兼容协议,但实现细节和认证机制存在差异,导致无法直接互换使用。以下是具体分析:

总结:Minio Python SDK 设计用于操作 Minio 服务或完全兼容 S3 的存储系统,而阿里云 OSS 虽基于 S3 协议,但实现细节和认证机制不同。 为确保稳定性和功能完整性,操作阿里云 OSS 时应使用官方 SDK。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐