我正在尝试通过 Java 从 AWS S3 存储桶下载 JSON 文件。
该文件由名为 Zuora 的第 3 方计费应用程序创建。
第一步是使用 OAuth 凭据生成文件。然后我得到一个带有文件 URL 的响应。我可以通过浏览器访问它并将其下载到我的桌面,但是当我尝试通过 Java 处理文件时,我遇到了问题。
我在网上看到的任何地方,我都看到人们似乎通过使用 AWS 库中的 AmazonS3Client 克服了类似的问题。参考:AWS S3 Java SDK - 下载文件帮助
我已经尝试过了,但是当我通过第 3 方访问存储桶时,我没有 Auth ID 和 Secret 来创建凭证来拨打电话。
我是否需要这些凭证才能对 AWS S3 上的存储桶进行 GET 调用?我想我不应该,因为我没有尝试创建文件或存储桶等。我无法在没有凭据的情况下通过 java 下载文件。
下面我添加了我试图从中下载文件的 URL 和 Java 代码。
带有 URL 的 Zuora 响应:{ "data": { "id": "fec47238-6a0f-48ef-9fb2-c7e24da886d5", "query": "select i.AccountId, i.Amount, i.PostedDate, i.InvoiceNumber, i .Status, i.Id 来自 Invoice i, Subscription s 其中 i.Status = 'Posted' and i.Amount > 0 and i.AccountId = s.AccountId and s.Id = '8ad084a67d58433a017d5cd0682c0b89'", "useIndexJoin": false, “sourceData”:“LIVE”,“queryStatus”:“完成”,“dataFile”:“** https://bucket-name.s3.us-west-2.amazonaws.com/file-name.jsonl?X -Amz-Security-Token=some-tokenX-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20211215T110928Z&X-Amz-SignedHeaders=host&X-Amz-Expires=14400&X-Amz-Credential=Some-Credential&X-Amz-Signature =一些签名**",“outputRows”:1,“processingTime”:1918,“remainingRetries”:3,“重试次数”:3,“updatedOn”:“2021-12-15T11:09:28.123Z”,“createdBy”:“some-id " }
2 爪哇:
private final AmazonS3 amazonS3Client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_WEST_2).build();
try (final S3Object s3Object = amazonS3Client.getObject("bucket-name.s3.us-west-2.amazonaws.com",
"file-name.jsonl");
final InputStreamReader streamReader = new InputStreamReader(s3Object.getObjectContent(), StandardCharsets.UTF_8);
final BufferedReader reader = new BufferedReader(streamReader)) {
System.out.println(reader.lines().collect(Collectors.toSet()));
}
错误:com.amazonaws.services.s3.model.AmazonS3Exception:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;