San*_*and 81 java amazon-s3 amazon-web-services
是否可以通过单个操作将txt/pdf/png文件上传到Amazon S3,并将上传的文件URL作为响应.如果是这样,AWS Java sdk是否需要在我的java struts2 webapplication中添加正确的库.
请为我建议一个解决方案.
hus*_*hai 94
不,你不能在单个动作中获取URL但是两个:)
首先,您可能必须在上传之前公开该文件,因为获取无人可访问的URL是没有意义的.你可以通过设置ACL来做到这一点,正如Michael Astreiko建议的那样.您可以通过调用getResourceUrl或获取资源URL getUrl.
AmazonS3Client s3Client = (AmazonS3Client)AmazonS3ClientBuilder.defaultClient();
s3Client.putObject(new PutObjectRequest("your-bucket", "some-path/some-key.jpg", new File("somePath/someKey.jpg")).withCannedAcl(CannedAccessControlList.PublicRead))
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg");
Run Code Online (Sandbox Code Playgroud)
注意1:getResourceUrl和
之间的不同之处getUrl在于,当发生异常时,getResourceUrl将返回null.
注意2:
getUrl方法未在AmazonS3界面中定义.如果使用标准构建器,则必须将对象强制转换为AmazonS3Client.
Jef*_*emp 79
鉴于您在上传请求中指定的存储桶和文件名,您可以自行完成.
例如,如果您的存储桶是,mybucket并且您的文件已命名myfilename:
https://mybucket.s3.amazonaws.com/myfilename
Run Code Online (Sandbox Code Playgroud)
s3根据您的桶所在的区域,该位将有所不同.例如,我使用东南亚地区,因此我的网址如下:
https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
Run Code Online (Sandbox Code Playgroud)
@hussachai 和 @Jeffrey Kemp 的回答非常好。但它们有一个共同点,即返回的 url 是虚拟主机样式,而不是路径样式。有关 s3 url 样式的更多信息,请参阅AWS S3 URL 样式。如果有些人想要生成路径样式 s3 url。这是步骤。基本上一切都与@hussachai 和@Jeffrey Kemp 的回答相同,只有一行设置更改如下:
AmazonS3Client s3Client = (AmazonS3Client) AmazonS3ClientBuilder.standard()
.withRegion("us-west-2")
.withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
.withPathStyleAccessEnabled(true)
.build();
// Upload a file as a new object with ContentType and title specified.
PutObjectRequest request = new PutObjectRequest(bucketName, stringObjKeyName, fileToUpload);
s3Client.putObject(request);
URL s3Url = s3Client.getUrl(bucketName, stringObjKeyName);
logger.info("S3 url is " + s3Url.toExternalForm());
Run Code Online (Sandbox Code Playgroud)
这将生成如下网址:https : //s3.us-west-2.amazonaws.com/mybucket/myfilename
小智 6
同样,如果您想通过 s3Client 链接,您可以在下面使用。
System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));
Run Code Online (Sandbox Code Playgroud)
对于 AWS 开发工具包 2+
String key = "filePath";
String bucketName = "bucketName";
PutObjectResponse response = s3Client
.putObject(PutObjectRequest.builder().bucket(bucketName ).key(key).build(), RequestBody.fromFile(file));
GetUrlRequest request = GetUrlRequest.builder().bucket(bucketName ).key(key).build();
String url = s3Client.utilities().getUrl(request).toExternalForm();
Run Code Online (Sandbox Code Playgroud)
小智 -48
要在上传之前公开文件,您可以使用以下#withCannedAcl方法PutObjectRequest:
myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket', 'somePath/someKey.jpg', new File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))
String url = myAmazonS3Client.getUrl('some-grails-bucket', 'somePath/someKey.jpg').toString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89976 次 |
| 最近记录: |