OpenStack Swift对象元数据增查异常求助:REST API与Horizon UI操作指导
OpenStack Swift 对象元数据操作方案
一、Horizon Web UI 添加与查看对象元数据
可以通过Horizon控制台操作对象元数据,步骤如下:
- 登录Horizon,进入项目 → 对象存储 → 容器
- 点击目标对象所在的容器名称,进入对象列表页
- 找到目标对象,点击右侧的下拉菜单(⋮),选择编辑元数据
- 在编辑界面中,添加自定义元数据:键名必须以
X-Object-Meta-开头(例如X-Object-Meta-Description),填写对应值后点击保存 - 查看元数据:同样在对象的下拉菜单中选择查看元数据,即可查看所有系统默认及自定义元数据
二、REST API 元数据操作(解决HEAD请求无元数据问题)
1. 添加元数据的正确请求方式
单个元数据
curl -X POST -H "X-Auth-Token: <你的认证令牌>" \ -H "X-Object-Meta-<自定义键名>: <对应值>" \ <Swift端点>/v1/AUTH_<项目ID>/<容器名>/<对象名>
多个元数据
curl -X POST -H "X-Auth-Token: <你的认证令牌>" \ -H "X-Object-Meta-Key1: Value1" \ -H "X-Object-Meta-Key2: Value2" \ <Swift端点>/v1/AUTH_<项目ID>/<容器名>/<对象名>
注意:所有自定义元数据键名必须以X-Object-Meta-为前缀,否则Swift不会将其识别为自定义元数据
2. HEAD请求无元数据的原因及解决
从你提供的swift capabilities输出中,tempurl中间件配置了:
outgoing_remove_headers: [u'x-object-meta-*'] outgoing_allow_headers: [u'x-object-meta-public-*']
这意味着:
- 普通自定义元数据(非
public-前缀)会在响应中被过滤,所以HEAD请求无法返回这些元数据 - 若要让元数据能通过HEAD请求返回,可将元数据键名改为
X-Object-Meta-Public-*开头(例如X-Object-Meta-Public-Tag),这类元数据会被允许出现在响应头中
三、操作元数据的配置要求
从当前swift capabilities输出看,默认配置已满足元数据操作的基本要求:
max_meta_count: 90:支持最多90个元数据键值对max_meta_name_length: 128:元数据键名最大长度128字符max_meta_value_length: 256:元数据值最大长度256字符max_meta_overall_size: 4096:所有元数据总大小不超过4KB
无需额外修改配置即可添加元数据,但如果需要解除HEAD请求的元数据过滤限制,需调整Swift代理服务的proxy-server.conf中tempurl中间件的配置:
- 找到
[filter:tempurl]配置段 - 修改
outgoing_remove_headers,移除x-object-meta-*;或在outgoing_allow_headers中添加需要保留的元数据前缀 - 重启Swift proxy服务使其生效
内容的提问来源于stack exchange,提问作者Surya Kumar Kumaravelan
相关产品推荐
相关产品推荐

