Amazon S3在客户端位置下载文件

时间:2018-05-16 13:07:03

标签: java amazon-web-services spring-boot amazon-s3

我的应用程序从AWS S3存储桶下载文件。我使用下面的代码:

public void downloadFileFromS3(String key) throws IOException, InterruptedException{
        LOG.info("Start - downloadFileFromS3 for key: {} and bucket name: {}", key, bucketName);
        initAWS();
        final GetObjectRequest request = new GetObjectRequest(bucketName, key);
        Download download = transferMgr.download(request, new File("D:\\rohit\\"+key));
        download.waitForCompletion();
}

现在,我们看到客户端的文件目标路径被硬编码为 D:\ rohit 。但是,在用户点击下载文件选项的实际应用程序中,该文件将直接下载到客户端的下载文件夹中。

有人可以帮我解决文件目的地路径问题。我正在使用 Java&春季启动

我尝试在网上搜索,并找到了有关利益流量的各种解决方案。但是,解决方案没有帮助:

Download file from Amazon S3 using REST API

Javascript to download a file from amazon s3 bucket?

download a file to particular location in client system

1 个答案:

答案 0 :(得分:0)

浏览器处理下载。我举个例子。当你有html说

<!-- Browser will download the file to user configured location instead of opening -->
<a href="http://example.org/mypdf.pdf" download>Download PDF</a>

而不是使用锚标签下载。您可以在以下流程收到请求时触发下载。

  1. 使用content-disposition生成预先签名的网址
  2. 重定向到该网址
  3. 使用内容处理生成S3预先指定的URL。

    GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, key);
    ResponseHeaderOverrides overrides = new ResponseHeaderOverrides();
    overrides.setContentDisposition("attachment; filename=\"give file name how you want your client to save\"");
    req.setResponseHeaders(overrides);
    URL url = this.client.generatePresignedUrl(req);
    

    现在将您的用户重定向到您生成的url,并让浏览器处理下载。

    希望它有所帮助。