S3生成下载链接

时间:2017-11-30 19:08:11

标签: java amazon-web-services

我无法为我上传到aws s3服务器的html文件生成下载链接。我能够生成链接并访问该文件。但我想要发生的是,当我点击链接时,要下载文件而不是打开它。

以下是网址的示例:

https://wassap_app.s3.us-east-1.amazonaws.com/report/test.html

以下是上传方法的代码:

public boolean uploadFile(String name) {
    try {
        this.client.putObject(new PutObjectRequest(bucketName, "report/" + name, this.file)
                .withCannedAcl(CannedAccessControlList.PublicRead));
        String url = client.getUrl(bucketName, "report/" + name).toExternalForm();
        System.out.println("################ Download File URL ################");
        System.out.println(url);
        System.out.println("###################################################");
        return true;
    } catch (AmazonServiceException ase) {
        return false;
    } catch (AmazonClientException ace) {
        return false;
    }

}

2 个答案:

答案 0 :(得分:2)

您可以将response-content-disposition查询参数用作documented here。您的网址将如下所示:

https://wassap_app.s3.us-east-1.amazonaws.com/report/test.html?response-content-disposition=attachment%3B%20filename%3D%22report.html%22

但文件还说明:

  

您必须使用Authorization标头或a来签署请求   使用这些参数时,预先签名的URL。它们不能用于   无符号(匿名)请求。

要为用户签名,您可以使用预先签名的网址。我现在没有可以测试的Java环境,但是下面的内容应该可以工作。

GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, "report/" + name);
ResponseHeaderOverrides overrides = new ResponseHeaderOverrides();
overrides.setContentDisposition("attachment; filename=\"report.html\"");
req.setResponseHeaders(overrides);
URL url = this.client.generatePresignedUrl(req);
System.out.println(url);

答案 1 :(得分:0)

调用此方法:

String url = client.getResourceUrl(bucketName, "report/" + name);

希望这有帮助!