অ্যামাজন এস 3 ফাইল আপলোড করুন এবং URL পান


94

একক ক্রিয়ায় অ্যামাজন এস 3 তে কোনও টেক্সট / পিডিএফ / পিএনজি ফাইল আপলোড করা এবং প্রতিক্রিয়া হিসাবে আপলোড করা ফাইলের URL পাওয়া সম্ভব? যদি তা হয় তবে আমার ডাব্লুএসএস জাভা এসডিকে কি সঠিক লাইব্রেরিটি আমার জাভা স্ট্রুট 2 ওয়েব অ্যাপ্লিকেশনটিতে যুক্ত করা দরকার।

দয়া করে আমাকে এর জন্য একটি সমাধান প্রস্তাব দিন।


উত্তর:


-35

আপলোড করার আগে ফাইলটি সর্বজনীন করতে আপনি এই #withCannedAclপদ্ধতিটি ব্যবহার করতে পারেন PutObjectRequest:

myAmazonS3Client.putObject(new PutObjectRequest('some-grails-bucket',  'somePath/someKey.jpg', new    File('/Users/ben/Desktop/photo.jpg')).withCannedAcl(CannedAccessControlList.PublicRead))

46
আমি কীভাবে এই অনুরোধটি থেকে লিঙ্কটি পেতে পারি?
আন্দ্রেয়াস রুডল্ফ

60
এটি আপলোড করা সংস্থার সার্বজনীন url কীভাবে পাবেন তা আমাদের জানায় না।
ভ্যালেনটিন ওয়েজিলিঙ্ক

107

না আপনি একক ক্রিয়ায় 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 ব্যর্থতা দেখা দিলে নালাগুলি ফিরে আসবে।

নোট 2: getUrl পদ্ধতিটি অ্যামাজনএস 3 ইন্টারফেসে সংজ্ঞায়িত করা হয়নি। আপনি যদি স্ট্যান্ডার্ড বিল্ডার ব্যবহার করেন তবে আপনাকে অবজেক্টটি অ্যামাজনএস 3 ক্লায়েন্টে ফেলে দিতে হবে।


27
এটি লক্ষণীয় যে এটি কেবল AWS- এ একক কলের ফলাফল করে in আপনি যদি জাভা এসডিকে খনন করেন তবে আপনি দেখতে পাবেন যে s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg")এডাব্লুএসকে কল ছাড়াই URL টি কার্যকর করে।
সিহিল

4
এটি সত্যই প্রস্তাবিত উত্তর হওয়া উচিত। ফাইলের নাম ফাঁক করে এমন ক্ষেত্রে অন্যান্য উত্তর ব্যর্থ হয়। এই জাতীয় পরিস্থিতিতে, S3 এ প্রদর্শিত ফাইলের নাম এবং URL প্রত্যয় একে অপরের থেকে পৃথক। উপরের s3Client.getUrl পদ্ধতি এই
দৃশ্যটি

4
দ্রষ্টব্য, getResourceUrlসর্বশেষ এসডিকে নেই।
মার্টিন সেরানো

6
সর্বশেষ এসডিকে s3Client.getUrl("your-bucket", "some-path/some-key.jpg").toString();জনসাধারণের ইউআরএল পাবেন।
ক্রিস্টিয়ানভা

4
এমনকি আরও নতুন এসডিকে সংস্করণগুলির জন্য, চেষ্টা করুনs3Client.utilities().getUrl(getUrlRequest);
39

84

আপনি আপলোডের অনুরোধে বালতি এবং ফাইলের নামটি নির্দিষ্ট করে দিয়ে নিজের জন্য এটি কাজ করতে পারেন।

যেমন যদি আপনার বালতিটি হয় mybucketএবং আপনার ফাইলটির নাম দেওয়া থাকে myfilename:

https://mybucket.s3.amazonaws.com/myfilename

s3বিট যা অঞ্চল আপনার বালতি হয় নির্ভর করে ভিন্ন হবে উদাহরণস্বরূপ, আমি দক্ষিণ-পূর্ব এশিয়া অঞ্চলের ব্যবহার তাই আমার URL গুলি মত।:

https://mybucket.s3-ap-southeast-1.amazonaws.com/myfilename

এডব্লিউএস ম্যানেজমেন্ট কনসোল থেকে ফাইলটি আপলোড করার পরে, নিম্নলিখিত লিঙ্কগুলি একটি একক ফাইলের জন্য কাজ করে, যার প্রতিক্রিয়া হতে পারে .. s3.amazonaws.com/cdn.generalsentiment.com/MVR/reports/… - cdn.generalsentiment। com.s3.amazonaws.com/MVR/report/… - cdn.generalsentiment.com/MVR/report/…
সংগ্রাম আনন্দ

4
হ্যাঁ, ইউআরএলটিতে বিভিন্নতা রয়েছে যা কাজ করা উচিত। আপনি যেটিকে ব্যবহার করতে চান তা চয়ন করুন এবং এটির সাথে যান।
জেফ্রি কেম্প

কুল .. তথ্যের জন্য ধন্যবাদ .. যেভাবে আপলোডিং অংশটি ডাব্লুএসএসডিডি লাইব্রেরির সাথে কি করতে চলেছে?
সংগ্রাম আনন্দ

হ্যাঁ, আমিও তাই বিশ্বাস করি। তবে স্ট্রুটসের সাথে আমার কোনও অভিজ্ঞতা নেই।
জেফ্রি কেম্প

আমি আপলোড করা জিনিসটি প্রায় শেষ করে ফেলেছি .. তবে অনুমতিগুলি পেয়েছি। এসডির জন্য অ্যাডাব্লুএস জাভা এসডিকে কোনও উপায় আছে কি আপলোড করার আগে আমাদের একটি ফাইল সর্বজনীন করতে দিন।
সংগ্রাম আনন্দ

6

@ হুশাচাই এবং @ জেফ্রে কেম্প উত্তরগুলি বেশ ভাল। তবে তাদের কিছু মিল রয়েছে ইউআরএল ফিরিয়ে দেওয়া ভার্চুয়াল-হোস্ট-স্টাইলের, পথের শৈলীতে নয়। এস 3 ইউআরএল স্টাইল সম্পর্কিত আরও তথ্যের জন্য, অ্যাডাব্লুএস এস 3 ইউআরএল স্টাইলগুলি উল্লেখ করতে পারেন । কিছু লোকের ক্ষেত্রে পথের স্টাইলের এস 3 ইউআরএল তৈরি করতে চান। পদক্ষেপ এখানে। মূলত সমস্ত কিছুই @ হুশাচাই এবং @ জেফ্রে কেম্প উত্তরগুলির সমান হবে, কেবলমাত্র নীচের মত এক লাইনের সেটিং পরিবর্তন সহ:

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());

এটি ইউআরএল তৈরি করবে: https://s3.us-west-2.amazonaws.com/mybucket/myfilename


5

একইভাবে যদি আপনি এস 3 ক্লায়েন্টের মাধ্যমে লিঙ্ক চান তবে আপনি নীচে ব্যবহার করতে পারেন।

System.out.println("filelink: " + s3Client.getUrl("your_bucket_name", "your_file_key"));

2

কিছুটা পুরানো তবে এখনও ভবিষ্যতে যে কেউ এ নিয়ে হোঁচট খাচ্ছে:

আপনি ইতিমধ্যে ক্রেডেনসিয়ালপ্রাইডার এবং অ্যামাজনএস 3 ক্লায়েন্ট লিখেছেন তা ধরে নিয়ে আপনি এক লাইনের সাহায্যে এটি করতে পারেন।

এটি দেখতে এই রকম হবে:

 String ImageURL = String.valueOf(s3.getUrl(
                                  ConstantsAWS3.BUCKET_NAME, //The S3 Bucket To Upload To
                                  file.getName())); //The key for the uploaded object

এবং আপনি যদি ক্রেডেনসিয়ালপ্রাইডার এবং অ্যামাজনএস 3 ক্লায়েন্টটি না লিখে থাকেন তবে কেবল এই জাতীয় URL পাওয়ার আগে এগুলি যুক্ত করুন:

  CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
        getApplicationContext(),
        "POOL_ID", // Identity pool ID
        Regions.US_EAST_1 // Region
);

1

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();

0
        System.out.println("Link : " + s3Object.getObjectContent().getHttpRequest().getURI());

এটির সাহায্যে আপনি ইতিমধ্যে আপলোড করা ফাইলটির লিঙ্কটি এস 3 বালতিতে পুনরুদ্ধার করতে পারেন।


0

পদ্ধতির নীচে একটি বালতিতে একটি নির্দিষ্ট ফোল্ডারে ফাইল আপলোড করা হয় এবং আপলোড করা ফাইলটির উত্পন্ন url ফিরিয়ে দেয়।

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);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.