Apakah mungkin untuk mengunggah file txt / pdf / png ke Amazon S3 dalam satu tindakan, dan mendapatkan URL file yang diunggah sebagai tanggapannya. Jika demikian, apakah AWS Java SDK adalah pustaka yang tepat yang perlu saya tambahkan di aplikasi web java struts2 saya.
Tolong sarankan saya solusi untuk ini.
java
amazon-s3
amazon-web-services
Sangram Anand
sumber
sumber
Jawaban:
Untuk membuat file menjadi publik sebelum mengupload Anda dapat menggunakan
#withCannedAcl
metodePutObjectRequest
:myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket', 'somePath/someKey.jpg', new File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))
sumber
Tidak, Anda tidak bisa mendapatkan URL dalam satu tindakan tetapi dua :)
Pertama-tama, Anda mungkin harus membuat file menjadi publik sebelum mengunggah karena tidak masuk akal untuk mendapatkan URL yang tidak dapat diakses oleh siapa pun. Anda dapat melakukannya dengan menyetel ACL seperti yang disarankan Michael Astreiko. Anda bisa mendapatkan URL sumber daya baik dengan menelepon
getResourceUrl
ataugetUrl
.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");
Note1: Perbedaan antara
getResourceUrl
dangetUrl
adalah bahwa getResourceUrl akan mengembalikan null saat pengecualian terjadi.Note2:
getUrl
metode tidak ditentukan di antarmuka AmazonS3. Anda harus mentransmisikan objek ke AmazonS3Client jika Anda menggunakan pembuat standar.sumber
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg")
URL berfungsi tanpa panggilan ke AWS.getResourceUrl
bukan dalam sdk terbaru.s3Client.getUrl("your-bucket", "some-path/some-key.jpg").toString();
akan mendapatkan url publik.s3Client.utilities().getUrl(getUrlRequest);
Anda dapat mengerjakannya sendiri dengan melihat bucket dan nama file yang Anda tentukan dalam permintaan upload.
misalnya jika bucket Anda adalah
mybucket
dan file Anda dinamaimyfilename
:https://mybucket.s3.amazonaws.com/myfilename
The
s3
bit akan berbeda tergantung pada wilayah bucket Anda dalam Sebagai contoh, saya menggunakan wilayah asia selatan-timur sehingga url saya seperti.:https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename
sumber
Jawaban @hussachai dan @Jeffrey Kemp lumayan bagus. Tetapi mereka memiliki kesamaan yaitu url yang dikembalikan adalah gaya virtual-host, bukan dalam gaya jalur. Untuk info lebih lanjut mengenai gaya url s3, dapat merujuk ke Gaya URL AWS S3 . Dalam kasus beberapa orang ingin membuat url gaya jalur s3 dibuat. Begini langkahnya. Pada dasarnya semuanya akan sama dengan jawaban @hussachai dan @Jeffrey Kemp, hanya dengan satu baris perubahan setting seperti di bawah ini:
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());
Ini akan menghasilkan url seperti: https://s3.us-west-2.amazonaws.com/mybucket/myfilename
sumber
Demikian pula jika Anda ingin menautkan melalui s3Client Anda dapat menggunakan di bawah ini.
System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));
sumber
agak tua tetapi masih untuk siapa pun yang tersandung pada ini di masa depan:
Anda dapat melakukannya dengan satu baris dengan asumsi Anda telah menulis CredentialProvider dan AmazonS3Client.
akan terlihat seperti ini:
String ImageURL = String.valueOf(s3.getUrl( ConstantsAWS3.BUCKET_NAME, //The S3 Bucket To Upload To file.getName())); //The key for the uploaded object
dan jika Anda tidak menulis CredentialProvider dan AmazonS3Client, tambahkan saja sebelum mendapatkan URL seperti ini:
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( getApplicationContext(), "POOL_ID", // Identity pool ID Regions.US_EAST_1 // Region );
sumber
Untuk AWS SDK 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();
sumber
System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());
dengan ini Anda dapat mengambil link dari file yang sudah diunggah ke S3 bucket.
sumber
Metode di bawah ini mengupload file dalam folder tertentu di dalam keranjang dan mengembalikan url yang dihasilkan dari file yang diupload.
private String uploadFileToS3Bucket(final String bucketName, final File file) { final String uniqueFileName = uploadFolder + "/" + file.getName(); LOGGER.info("Uploading file with name= " + uniqueFileName); final PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, uniqueFileName, file); amazonS3.putObject(putObjectRequest); return ((AmazonS3Client) amazonS3).getResourceUrl(bucketName, uniqueFileName); }
sumber