R语言aws.s3包获取S3文件版本信息异常问题咨询
R语言aws.s3包get_versions筛选指定对象版本的解决方法
- 问题根因:当前发布版本的aws.s3包存在参数传递缺陷,
get_versions()函数的prefix、path参数未被正确传入S3 API请求,因此无法生效,调用时只会返回存储桶全量版本信息。 - 解决方法1:调用底层s3HTTP接口构造请求(性能优先,推荐使用)
直接调用aws.s3包封装的底层请求函数,手动传递versions接口所需的筛选参数:# 筛选指定前缀的所有对象版本 version_list <- s3HTTP( verb = "GET", bucket = "mybucket", path = "?versions", query = list(prefix = "myprefix"), parse_response = TRUE ) # 精确获取单个指定对象的版本列表,prefix参数填完整对象key即可 single_obj_version_list <- s3HTTP( verb = "GET", bucket = "mybucket", path = "?versions", query = list(prefix = "myfilepath"), parse_response = TRUE ) - 解决方法2:全量拉取后本地过滤(适合存储桶内对象数量较少的场景)
先拉取存储桶全量版本数据,再根据对象Key做本地筛选:# 拉取存储桶全量版本信息 all_versions <- get_versions(bucket = "mybucket") # 筛选前缀匹配的所有对象版本 prefix_filtered_versions <- all_versions[grepl("^myprefix", all_versions$Key), ] # 精确匹配单个对象的所有版本 obj_filtered_versions <- all_versions[all_versions$Key == "myfilepath", ]
后续aws.s3包修复该参数传递缺陷后,即可直接使用原生get_versions()的prefix参数完成筛选。
内容的提问来源于stack exchange,提问作者Steve Powell
相关产品推荐
相关产品推荐

