如何读取AWS S3存储桶中远程存储的.h5文件及排查301报错
问题原因
你触发HTTP 301 PermanentRedirect报错的核心原因是s3read_using的参数传参格式不符合aws.s3包的要求,这也是新手第一次用这个包最容易踩的坑:
bucket参数仅需要传入纯存储桶名称,不需要带s3://协议前缀、也不需要拼接桶内的路径内容,你之前传入的s3://arpa-e-perform/ERCOT/属于错误格式object参数仅需要传入文件在存储桶内的相对路径,不需要带s3://前缀和存储桶名称,传入完整S3 URI会导致包构造请求时拼接错访问端点,最终被S3服务返回重定向报错
修正方案
s3read_using本身就会自动把目标文件下载到本地临时目录,再将临时文件路径传入你指定的读取函数,读取完成后自动清理临时文件,完全满足你不需要手动提前下载文件的需求。修正后的代码如下:
library(aws.s3) library(rhdf5) # 全局配置默认区域,避免每次调用函数重复传region参数 Sys.setenv("AWS_DEFAULT_REGION" = "us-west-2") # 读取S3上的h5文件 h5_result <- s3read_using( FUN = rhdf5::H5Fopen, bucket = "arpa-e-perform", object = "ERCOT/2018/Solar/Actuals/BA_level/BA_solar_actuals_2018.h5" )
补充说明
- 你之前调用
bucket_exists能正常返回存储桶存在的结果,说明本地配置的AWS访问凭证、网络连通性都没有问题,不需要额外调整权限或网络配置 - 如果后续需要写入文件到S3,
s3write_using的bucket和object参数规则和读取时完全一致,同样不要传入完整S3 URI
内容的提问来源于stack exchange,提问作者Hugo
相关产品推荐
相关产品推荐

