Я загружаю файл изображения на Amazon AWS S3 bucket с использованием Java.Как получить URL-адрес файла, загруженного в ведро AWS S3?
Я использую следующие Maven зависимостей -
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.9.28.1</version>
</dependency>
Я могу загрузить файл, а также возможность загружать содержимое. Но я хочу вернуть URL-адрес изображения пользователю.
Как я могу получить URL-адрес изображения сразу после загрузки на ведро s3?
Вот мой Java-код -
public void uploadProfile(InputStream fileInputStream, String fileName) {
AmazonS3 s3client = new AmazonS3Client(new BasicAWSCredentials("MY-ACCESS-KEY", "MY-SECRET-KEY"));
String bucketName = "MyBucket";
String key = "MyKey";
try {
System.out.println("Listing buckets");
for (Bucket bucket : s3client.listBuckets()) {
System.out.println(" - " + bucket.getName());
}
System.out.println();
System.out.println("Uploading a new object to S3 from a file\n");
s3client.putObject(new PutObjectRequest(bucketName, key, fileInputStream, new ObjectMetadata()).withCannedAcl(CannedAccessControlList.PublicRead));
System.out.println("Downloading an object");
S3Object object = s3client.getObject(new GetObjectRequest(bucketName, key));
System.out.println("Content-Type: " + object.getObjectMetadata().getContentType());
displayTextInputStream(object.getObjectContent());
System.out.println("Listing objects");
ObjectListing objectListing = s3client.listObjects(new ListObjectsRequest()
.withBucketName(bucketName)
.withPrefix("My"));
for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
System.out.println(" - " + objectSummary.getKey() + " " +
"(size = " + objectSummary.getSize() + ")");
}
System.out.println();
} catch (AmazonServiceException ase) {
System.out.println("Error Message: " + ase.getMessage());
ase.printStackTrace();
} catch (AmazonClientException ace) {
System.out.println("Error Message: " + ace.getMessage());
ace.printStackTrace();
}
}
private static void displayTextInputStream(InputStream input) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
while (true) {
String line = reader.readLine();
if (line == null) break;
System.out.println(" " + line);
}
System.out.println();
}
Я попытался ударить URL: https://MyBucket.s3.amazonaws.com/myfilename
Но его показывая сообщение в формате XML, как -
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>64358C14C976A2CB</RequestId>
<HostId>
ZQ+DAaocOLxR/TmfEMGLcYm4Zk4Kl1vCKjciYiXKF1gYH5Lhj6oM4rd/o/4+SLVb
</HostId>
</Error>
Так как я могу получить URL изображения сразу после загрузки на ведро s3?
Хорошо, поэтому вопрос о разрешении, я буду изучать, но я подумал, что с помощью кодирования я получу URL. – Deepu