diff --git a/DESCRIPTION b/DESCRIPTION index 9c11671..4bde4f7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -15,6 +15,7 @@ Authors@R: c(person("Thomas J.", "Leeper", role = "aut", person("Andrii", "Degtiarov", role = "ctb"), person("Dhruv", "Aggarwal", role = "ctb"), person("Alyssa", "Columbus", role = "ctb"), + person("Pieter", "Provoost", role = "ctb"), person("Simon", "Urbanek", role = c("cre", "ctb"), email = "simon.urbanek@R-project.org") ) diff --git a/NEWS.md b/NEWS.md index 40d2d8f..58c1ca2 100644 --- a/NEWS.md +++ b/NEWS.md @@ -23,6 +23,7 @@ ## Bugfixes * `put_object` now closes its connections properly (#354) +* `get_bucket` now works with DigitalOcean (#393) # aws.s3 0.3.21 diff --git a/R/get_bucket.R b/R/get_bucket.R index 0c4ca39..0ba05c7 100644 --- a/R/get_bucket.R +++ b/R/get_bucket.R @@ -45,7 +45,7 @@ get_bucket <- function(bucket, if (isTRUE(parse_response)) { while ( - r[["IsTruncated"]] == "true" && + (r[["IsTruncated"]] == "true" | "NextMarker" %in% names(r)) && !is.null(max) && as.integer(r[["MaxKeys"]]) < max ) { @@ -53,12 +53,12 @@ get_bucket <- function(bucket, prefix = prefix, delimiter = delimiter, "max-keys" = as.integer(pmin(max - as.integer(r[["MaxKeys"]]), 1000)), - marker = tail(r, 1)[["Contents"]][["Key"]] + marker = r[[max(which(names(r) == "Contents"))]][["Key"]] ) extra <- s3HTTP(verb = "GET", bucket = bucket, query = query, parse_response = parse_response, ...) - new_r <- c(r, tail(extra, -5)) - new_r[["MaxKeys"]] <- as.character(as.integer(r[["MaxKeys"]]) + as.integer(extra[["MaxKeys"]])) - new_r[["IsTruncated"]] <- extra[["IsTruncated"]] + r[["MaxKeys"]] <- as.character(as.integer(r[["MaxKeys"]]) + as.integer(extra[["MaxKeys"]])) + r[["IsTruncated"]] <- extra[["IsTruncated"]] + new_r <- c(r, extra[which(names(extra) == "Contents")]) attr(new_r, "x-amz-id-2") <- attr(r, "x-amz-id-2") attr(new_r, "x-amz-request-id") <- attr(r, "x-amz-request-id") attr(new_r, "date") <- attr(r, "date")