Только если вы откроете новое окно, используя window.open (), новое окно сможет закрыть код, как я уже упоминал выше. Это отлично работает для меня :) Примечание. Никогда не используйте href для открытия страницы на новой вкладке. Window.close () не работает с «href». Вместо этого используйте window.open ().
Чтобы сделать файл общедоступным перед загрузкой, вы можете использовать метод #withCannedAcl
в PutObjectRequest
:
myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket', 'somePath/someKey.jpg', new File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))
Аналогично, если вы хотите ссылку через s3Client, вы можете использовать ниже.
System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));
Нет, вы не можете получить URL-адрес в одном действии, но два:)
Прежде всего, вам, возможно, придется публиковать файл перед загрузкой, потому что нет смысла получать URL-адрес, который никто не может доступ. Вы можете сделать это, установив ACL, как предложил Майкл Астрейко. Вы можете получить URL ресурса, вызвав getResourceUrl
или 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");
Примечание1: Разница между getResourceUrl
и getUrl
заключается в том, что getResourceUrl вернет значение null при возникновении исключения.
Примечание2: getUrl
метод не определен в интерфейсе AmazonS3. Вы должны отдать объект AmazonS3Client, если используете стандартный строитель.
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg")
работает с URL без вызова AWS.
– sihil
30 September 2016 в 10:52
getResourceUrl
не находится в последнем sdk.
– Martin Serrano
21 March 2018 в 23:01
s3Client.getUrl("your-bucket", "some-path/some-key.jpg").toString();
появится общий URL.
– kristianva
11 June 2018 в 16:34
Вы можете самостоятельно решить эту проблему и указать имя файла в запросе на загрузку.
, например. если ваш ведро mybucket
, а ваш файл имеет имя myfilename
:
https://mybucket.s3.amazonaws.com/myfilename
бит s3
будет отличаться в зависимости от того, в какой области находится ваше ведро. Например, я использую юг -азиатская область, поэтому мои URL-адреса подобны:
https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());
с этим вы можете получить ссылку на уже загруженный файл в ведро S3.
немного устарел, но все еще для тех, кто наткнется на это в будущем:
вы можете сделать это с одной строкой, если вы уже писали CredentialProvider и AmazonS3Client.
он будет выглядеть следующим образом:
String ImageURL = String.valueOf(s3.getUrl(
ConstantsAWS3.BUCKET_NAME, //The S3 Bucket To Upload To
file.getName())); //The key for the uploaded object
, и если вы не написали CredentialProvider и AmazonS3Client, просто добавьте их перед тем, как получить URL-адрес следующим образом:
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"POOL_ID", // Identity pool ID
Regions.US_EAST_1 // Region
);