parse_aws_s3_response中出错,Forbidden(http 403)

T-J*_*Jay 6 r amazon-s3

我正在尝试使用aws.s3库将数据加载到S3中.以下是我的代码:

Sys.setenv("AWS_ACCESS_KEY_ID" = ".............",
       "AWS_SECRET_ACCESS_KEY" = "...............",
       "AWS_DEFAULT_REGION" = "......") 
Run Code Online (Sandbox Code Playgroud)

查看桶:

get_bucket(bucket = "....",
           check_region = FALSE,
           verbose = TRUE)
Run Code Online (Sandbox Code Playgroud)

上面的代码工作,并返回桶的内容.

将对象保存到s3:

s3save(data, 
       object = ".....",
       bucket = ".....")
Run Code Online (Sandbox Code Playgroud)

错误返回:

List of 4
$ Code     : chr "AccessDenied"
$ Message  : chr "Access Denied"
$ RequestId: chr ""
$ HostId   : chr ""
- attr(*, "headers")=List of 6
..$ x-amz-request-id : chr ""
..$ x-amz-id-2       : chr ""
..$ content-type     : chr "application/xml"
..$ transfer-encoding: chr "chunked"
..$ date             : chr "Tue, 05 Sep 2017 13:23:42 GMT"
..$ server           : chr "AmazonS3"
..- attr(*, "class")= chr [1:2] "insensitive" "list"
- attr(*, "class")= chr "aws_error"
- attr(*, "request_canonical")= chr "GET\n/"| __truncated__
- attr(*, "request_string_to_sign")= car ""| __truncated__
- attr(*, "request_signature")= chr "AWS4-HMAC-SHA256 Credential=| 
__truncated__
NULL

Error in parse_aws_s3_response(r, Sig, verbose = verbose) : 
Forbidden (HTTP 403).
Run Code Online (Sandbox Code Playgroud)

解决这个问题的任何方法.

T-J*_*Jay 1

@audiracmichelle、@Prakhar,使用 aws.s3 库中的函数put_object,如下所示。函数 put_object 的输入参数object是对象在 s3 中应具有的名称(字符串)。

data您可以首先从内存中写入序列化对象(在本例中):

in_mem_obj <- rawConnection(raw(0), "w")
utils::write.table(data, in_mem_obj, sep = "\t", na = "", quote = TRUE, 
                   row.names = FALSE, fileEncoding="UTF-8")
Run Code Online (Sandbox Code Playgroud)

然后将对象保存到S3存储桶:

put_object(rawConnectionValue(in_mem_obj),
           object = FILEPATH/FILENAME,
           bucket = BUCKET,
           headers = c('x-amz-server-side-encryption' = 'AES256'),
           key = AWS_ACCESS_KEY_ID,
           secret = AWS_SECRET_ACCESS_KEY,
           region = AWS_REGION,
           check_region = FALSE)
Run Code Online (Sandbox Code Playgroud)