我无法为我上传到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;
}
}
答案 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);
希望这有帮助!