Không, bạn không thể lấy URL trong một hành động ngoài hai :)
Trước hết, bạn có thể phải đặt tệp ở chế độ công khai trước khi tải lên bởi vì việc lấy URL mà không ai có thể truy cập sẽ vô nghĩa. Bạn có thể làm như vậy bằng cách đặt ACL như Michael Astreiko đã đề xuất. Bạn có thể lấy URL tài nguyên bằng cách gọi getResourceUrl
hoặc 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");
Lưu ý 1:
Sự khác nhau giữa getResourceUrl
và getUrl
là getResourceUrl sẽ trả về null khi ngoại lệ xảy ra.
Lưu ý2:
getUrl
phương thức không được xác định trong giao diện AmazonS3. Bạn phải truyền đối tượng tới AmazonS3Client nếu bạn sử dụng trình tạo chuẩn.