微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 AWS Java SDK 通过 AWS API Gateway 从 S3 下载文本文件

如何解决使用 AWS Java SDK 通过 AWS API Gateway 从 S3 下载文本文件

我是 AWS 的初学者。我的目标是通过公共 API 端点访问存储在私有 S3 存储桶中的 csv 文件

为了实现这一点,我在 AWS 中创建了一个简单的设置。

  • 我在特定的 AWS S3 存储桶中有几个 .csv 文件
  • 我在 AWS API 网关上创建了一个 API 资源来访问这个特定的 S3 存储桶。
  • 需要下载的文件名通过 URL 路径参数定义:{filename}。

当我从 AWS 控制台或使用 Postman 测试 API 资源时,我得到了预期的响应。具体来说,我返回一个 HTTP 响应,在响应正文中包含文件的原始内容。响应的内容类型是plain/cvs。

我已经为 Java 8 生成了 SDK 源,我正在使用这个 SDK 对 AWS API 网关上的 API 资源进行 REST 调用。但是,该调用不会引发异常,我没有在响应中获取文件。另外,我不知道如何下载文件并将其存储在本地文件系统的文件中。

我已经尝试探索 API Gateway 中的许多选项,但我还没有找到使它起作用的方法

这是我使用为我的 API 生成的 Java SDK 下载文件代码

    // I am using the SDK for Java that I generated from the AWS API Gateway console.
    import com.example.myapp.aws.sdk.*;
    import com.example.myapp.aws.sdk.model.GetDownloadfileRequest;
    import com.example.myapp.aws.sdk.model.GetDownloadfileResult;

    public void downloadS3File(String filename) {
        
        try {
            GetDownloadfileRequest request =
                    new GetDownloadfileRequest();
            request.filename(filename);

            GetDownloadfileResult response =
                    clientSdk.getDownloadfile(request);
            
            //This prints: "Got response: {}"
            System.out.println("Got response: " + response);

            // This prints: "23561"
            response.sdkResponseMetadata().header("Content-Length").ifPresent(System.out::println);

            // HOW TO STORE THE RESPONSE IN A FILE IN THE LOCAL disK??
        } catch (Exception e) {
            System.out.println("Error downloading file.");
            e.printstacktrace();
        }
    }

非常感谢您的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。