জাভা ব্যবহার করে প্রদত্ত এস 3 বাল্টিতে একটি নির্দিষ্ট কী উপস্থিত রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন


88

আমি জাভা ব্যবহার করে প্রদত্ত বালতিতে একটি কী উপস্থিত রয়েছে কিনা তা খতিয়ে দেখতে চাই। আমি এপিআইয়ের দিকে নজর রেখেছি কিন্তু এমন কোনও পদ্ধতি নেই যা কার্যকর। আমি ব্যবহার করার চেষ্টা করেছি getObjectকিন্তু এটি ব্যতিক্রম ছুঁড়েছে।


4
ভবিষ্যতে দয়া করে আপনি কী ব্যতিক্রম পেয়েছিলেন তার মতো আরও তথ্য সরবরাহ করুন .. আমি একটি অনুমানের ভিত্তিতে একটি উত্তর সরবরাহ করেছি ..
শেঠু

4
এফওয়াইআই: এই প্রশ্নের জন্য, গৃহীত উত্তর সেরা উত্তর নয়।
মালানা

উত্তর:


3

Jets3t লাইব্রেরি ব্যবহার করুন। এটি এডাব্লুএস এসডিকে তুলনায় অনেক বেশি সহজ এবং শক্ত। এই লাইব্রেরিটি ব্যবহার করে আপনি s3service.getObjectDetails () কল করতে পারেন। এটি কেবলমাত্র অবজেক্টের (বিষয়বস্তু নয়) বিশদটি পরীক্ষা করে পুনরুদ্ধার করবে। যদি বস্তুটি অনুপস্থিত থাকে তবে এটি 404 নিক্ষেপ করবে। সুতরাং আপনি সেই ব্যতিক্রমটি ধরতে পারেন এবং আপনার অ্যাপ্লিকেশনটিতে এটি মোকাবেলা করতে পারেন।

তবে এটি কাজ করার জন্য আপনার সেই বালতিতে ব্যবহারকারীর জন্য তালিকাবুক অ্যাক্সেস থাকা দরকার। শুধু getObject অ্যাক্সেস কাজ করবে না। কারণ হ'ল অ্যামাজন আপনাকে লিস্টবকেটের অ্যাক্সেস না থাকলে কীটির উপস্থিতি যাচাই করতে বাধা দেবে। কীটি উপস্থিত রয়েছে কিনা তা কেবল জানা, কিছু ক্ষেত্রে ক্ষতিকারক ব্যবহারকারীদের পক্ষেও যথেষ্ট। অতএব যদি না তাদের তালিকায় থাকা অ্যাক্সেস না থাকে তবে তারা তা করতে সক্ষম হবে না।


4
সমস্ত - নীচে এই প্রশ্নের একটি আপডেট উত্তর দেখুন: stackoverflow.com/a/36653034/49678
alexandroid

4
jets3t একটি পুরানো অবহেলা গ্রন্থাগার। পরিবর্তে আউস-জাভা-এসডিকে ব্যবহার করুন।
the_storyteller

"সহজ এবং আরও

296

অফিসিয়াল জাভা এপিআইতে এখন একটি doObjectExist পদ্ধতি রয়েছে।

উপভোগ করুন!


13
এটি 1.10.51 এ যুক্ত করা হয়েছিল
স্টিমার 25

4
আমরা এটিকে উজ্জীবিত করতে এবং এটি শীর্ষে নিয়ে যেতে পারি!
সুরেশএস

4
সঠিক জিনিসটি হ'ল এটি গ্রহণযোগ্য উত্তরটি তৈরি করা তবে কেবল ওপি তা করতে পারে। meta.stackexchange.com/questions/120568/…
মালানা

4
এটি অবশ্যই একটি নেটওয়ার্ক কল করতে হবে যা আপনার কাছে প্রচুর অবজেক্ট থাকলে ব্যয়বহুল ... খুব খারাপ এটি মেটাডেটা অনুরোধটি বাতিল করে দিতে পারে না।
জোয়েল

9
দেখে মনে হচ্ছে অ্যামাজনটি doesObjectExist2.x এসডিকে (বর্তমানে v2.3.9) থেকে সরানো হয়েছে।
বাম্পফার

59

হালনাগাদ:

মনে হচ্ছে ঠিক এটি পরীক্ষা করার জন্য একটি নতুন এপিআই রয়েছে। এই পৃষ্ঠায় আরেকটি উত্তর দেখুন: https://stackoverflow.com/a/36653034/435605

মূল পোস্ট:

ব্যবহার errorCode.equals("NoSuchKey")

try {
    AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider());
    String bucketName = getBucketName();
    s3.createBucket(bucketName);
    S3Object object = s3.getObject(bucketName, getKey());
} catch (AmazonServiceException e) {
    String errorCode = e.getErrorCode();
    if (!errorCode.equals("NoSuchKey")) {
        throw e;
    }
    Logger.getLogger(getClass()).debug("No such key!!!", e);
}

ব্যতিক্রম সম্পর্কে দ্রষ্টব্য: আমি জানি ব্যতিক্রম প্রবাহ নিয়ন্ত্রণের জন্য ব্যবহার করা উচিত নয়। সমস্যাটি হ'ল অ্যামাজন এই প্রবাহটি পরীক্ষা করতে কোনও এপিআই সরবরাহ করেনি - কেবল ব্যতিক্রম সম্পর্কে ডকুমেন্টেশন।


14
প্রোগ্রাম নিয়ন্ত্রণের জন্য ব্যতিক্রম হ্যান্ডলিং ব্যবহার করবেন না।
সাইমন পেক

34
@ সিমোনপেক: আপনি ঠিক বলেছেন। সমস্যাটি হ'ল অ্যামাজন এই প্রবাহটি পরীক্ষা করতে কোনও এপিআই সরবরাহ করেনি - কেবল ব্যতিক্রম সম্পর্কে ডকুমেন্টেশন। আপনার ডাউন-ভোটাটি আপ-ভোটিং না দিলে দয়া করে সরান।
অ্যালিকেলজিন-কিলাকা

4
জাভা এসডিকে-তে এটি আর সত্য বলে মনে হয় না। আমি দেখতে পাচ্ছি যে আমার errorMessage"সন্ধান পাওয়া যায়নি" তে সেট করা আছে তবে এটি errorCodeশূন্য।
বিস্তেম্পি

4
আমি স্থিতি কোড 404 অনুসন্ধান করতে যাব। স্ট্রিং দেখার চেয়ে আরও দৃ rob় বলে মনে হচ্ছে
ওসকার কেজেলিন

4
@ আরবোয়ারম্যানের মন্তব্যটি ভুল - এটি NoSuchKey। এস 3 ত্রুটি কোডগুলির একটি চূড়ান্ত তালিকার
অ্যালেন জর্জে

23

AWS SDK ব্যবহার করে getObjectMetadata পদ্ধতিটি ব্যবহার করুন। কীটি উপস্থিত না থাকলে পদ্ধতিটি একটি অ্যামাজন সার্ভিস এক্সসেপশন নিক্ষেপ করবে।

private AmazonS3 s3;
...
public boolean exists(String path, String name) {
    try {
        s3.getObjectMetadata(bucket, getS3Path(path) + name); 
    } catch(AmazonServiceException e) {
        return false;
    }
    return true;
}

4
getObject পাশাপাশি অ্যামাজন সার্ভিস এক্সেকশনও ছুঁড়েছে, তবে কেন দুটি কল করা হবে? এছাড়াও, আমি কীভাবে জানব যে এই অব্যাহতি থেকে অবজেক্টটি বিদ্যমান নেই? সম্ভবত এটি অন্য একটি এস 3 ত্রুটির কারণে হয়েছিল এবং বস্তুটি সত্যই পাওয়া গেছে।
অ্যালিকেলিন-কিলাকা

4
প্রোগ্রাম নিয়ন্ত্রণের জন্য ব্যতিক্রম হ্যান্ডলিং ব্যবহার করবেন না।
সাইমন পেক

4
@ অ্যালিক্লিজিন-কিলাকা, কারণ গেটোবজেক্ট () এর অর্থ আপনাকে অবজেক্টের বিষয়বস্তু ডাউনলোড করতে হবে, এটি সম্ভাব্য বিশাল হতে পারে।
জেসন নিকোলস

18
@ সিমোনপেক, এটি আদর্শ নয়, তবে যখন অ্যামাজন একটি উপযুক্ত উপস্থিত () পদ্ধতি সরবরাহ করে, তখন আপনার পয়েন্টটি বৈধ।
জেসন নিকোলস

4
@ সিমোনপেকের কি এই ক্ষেত্রে আপনার বিকল্প আছে? এটি প্রোগ্রাম নিয়ন্ত্রণ প্রবাহ হিসাবে ব্যাতিক্রমের অপব্যবহারের নির্মম অপব্যবহার নয় ... এটি সহজ, এটি কী করে তা নির্ভুল এবং নিরাপদ। আপনি যদি নিজের ধারণাকে চূড়ান্ত দিকে নিয়ে যান (আপনি স্পষ্টতই যদি মনে করেন যে এই কোড স্নিপেট ব্যতিক্রমগুলি আপত্তিজনক ব্যবহার করছে), তবে কেন কোনও ভাষায় ব্যতিক্রম আছে? প্রোগ্রামটি সতর্ক করতে এবং প্রোগ্রামটির প্রবাহ পরিবর্তনের জন্য ব্যতিক্রম ছোঁড়ার পরিবর্তে রানটাইমটি কেবলমাত্র আমার মনে করা উচিত termin
ডন চ্যাডল

17

আমাজন জাভা এসডিকে ১.১০+ তে, আপনি getStatusCode()এইচটিটিপি প্রতিক্রিয়াটির স্থিতি কোড পেতে ব্যবহার করতে পারেন যা অবজেক্টটি উপস্থিত না থাকলে ৪০৪ হবে।

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import org.apache.http.HttpStatus;

try {
    AmazonS3 s3 = new AmazonS3Client();
    ObjectMetadata object = s3.getObjectMetadata("my-bucket", "my-client");
} catch (AmazonS3Exception e) {
    if (e.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
        // bucket/key does not exist 
    } else {
        throw e;
    }
}

getObjectMetadata()কম সংস্থান গ্রহণ করে এবং প্রতিক্রিয়াটির মতো বন্ধ করার দরকার নেই getObject()


পূর্ববর্তী সংস্করণগুলিতে, আপনি getErrorCode()যথাযথ স্ট্রিং ব্যবহার করতে এবং এটি পরীক্ষা করতে পারেন (সংস্করণটির উপর নির্ভর করে)।


যদি আপনার এস 3 অবজেক্টটির সাথে কোনও মেটা ডেটা সংযুক্ত না থাকে, তবে getObjectMetadata এস 3 অবজেক্ট উপস্থিত থাকলেও একটি 404 ত্রুটি নিক্ষেপ করবে। উদ্দেশ্যটি যদি এস 3 অবজেক্টের অস্তিত্ব পরীক্ষা করা হয় তবে আমি এটি সুপারিশ করব না।
আশীষ গোয়েল 21'16

@ আশিসগোয়েল, অবজেক্টটি উপস্থিত থাকলে সর্বদা মেটাডেটা থাকবে। প্রকৃতপক্ষে, অন্তর্নিহিত HTTP অনুরোধটি কেবল অবজেক্টের ইউআরএলটির একটি হেড।
পল ড্রাগার

5

আপনার কী হিসাবে তালিকার উপস্থাপনা উপস্থাপনের উপস্থাপনাটি ব্যবহার করুন।

নেট কোড:

 public bool Exists(string key)
    {

        using (Amazon.S3.AmazonS3Client client = (Amazon.S3.AmazonS3Client)Amazon.AWSClientFactory.CreateAmazonS3Client(m_accessKey, m_accessSecret))
        {
            ListObjectsRequest request = new ListObjectsRequest();
            request.BucketName = m_bucketName;
            request.Prefix = key;
            using (ListObjectsResponse response = client.ListObjects(request))
            {

                foreach (S3Object o in response.S3Objects)
                {
                    if( o.Key == key )
                        return true;
                }
                return false;
            }
        }
    }.

7
সতর্কতা! অ্যামাজন প্রতিটি লিস্টের জন্য অতিরিক্ত চার্জ দেয়! এই পদ্ধতিটি ঠিক আছে তবে ফাইলটি ডাউনলোডের আগে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে এটি ব্যবহার করবেন না।
ব্যবহারকারী 34402

উপসর্গের সাথে মেলে এমন সমস্ত বস্তু পাওয়া যায় কারণ কোনও ফাইল উপস্থিত থাকলে এটি পাওয়ার পক্ষে ভাল উপায় নয়। যদি আপনার কাছে একাধিক ফাইল থাকে যা কী দিয়ে শুরু হয়, তবে এটি আপনার নির্দিষ্ট করা ফাইল সহ সমস্ত বস্তু ডাউনলোড করবে।
ক্রিপথ

জিএসটি বনাম জিইটি ব্যয় সম্পর্কিত: নোট করে রাখুন যে কোনও ডেটা স্থানান্তরিত করার জন্যও আপনাকে চার্জ দেওয়া হয়। তাই আপনি যদি তা না হয় অত্যন্ত অসম্ভাব্য যে ফাইল বিদ্যমান (উদাহরণস্বরূপ, আপনি যদি একটি কী-এর মত একটি র্যান্ডম UUID তৈরি এবং নিশ্চিত করুন যে এটি ব্যবহারে নেই ইতিমধ্যে করতে চাই) তাহলে তাহলে GET অনেক সস্তা। তবে যদি ফাইলগুলি 0.5 এমবি হয় এবং ইতিমধ্যে এটির 11% সম্ভাবনা থাকে তবে LIST কিছুটা সস্তা দেখায়। যদি ফাইলগুলি 0.1 এমবি হয় এবং 52% বিদ্যমান থাকার সুযোগ থাকে তবে একই রকম ... ফাইলগুলি যত বড় হবে, তত তাড়াতাড়ি তালিকাটি সস্তা হবে। তবে আবারও, একটি সাধারণ দৃশ্য একটি নতুন উত্পন্ন UID কীটি পরীক্ষা করছে এবং GET এর জন্য সস্তা।
বাম্পফার

5

পিএইচপি-র জন্য (আমি জানি প্রশ্নটি জাভা, তবে গুগল আমাকে এখানে এনেছে), আপনি স্ট্রিম র‌্যাপার এবং ফাইল_এক্সেস্ট ব্যবহার করতে পারেন

$bucket = "MyBucket";
$key = "MyKey";
$s3 = Aws\S3\S3Client->factory([...]);
$s3->registerStreamWrapper();
$keyExists = file_exists("s3://$bucket/$key");

4

এই জাভা কোডটি কি (ফাইল) এস 3 বালতিতে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে।

public static boolean isExistS3(String accessKey, String secretKey, String bucketName, String file) {

    // Amazon-s3 credentials
    AWSCredentials myCredentials = new BasicAWSCredentials(accessKey, secretKey); 
    AmazonS3Client s3Client = new AmazonS3Client(myCredentials); 

    ObjectListing objects = s3Client.listObjects(new ListObjectsRequest().withBucketName(bucketName).withPrefix(file));

    for (S3ObjectSummary objectSummary: objects.getObjectSummaries()) {
        if (objectSummary.getKey().equals(file)) {
            return true;
        }
    }
    return false;
}

4
এটি কাজ করা উচিত, তবে হাজার বা ফাইল রয়েছে এমন ক্ষেত্রে ধীর হওয়া উচিত এবং প্রতিটি ফাইলের জন্য লুপের প্রয়োজন হবে।
দানিজেল

যেমন @ দানিজেল বলেছিলেন, প্রদত্ত কীটির কোনও অবজেক্ট উপস্থিত রয়েছে কি না তা এটি সত্যই নির্ধারণ করবে, তবে এটি করার জন্য এটি অবশ্যই এস 3 এ থাকা কয়েক হাজার অবজেক্টের উপস্থিতি আছে কি নেই তা নির্ধারণের আগে লুপ করতে হবে
ডন চেইডল

4
আমি ধনী হওয়ার বিষয়ে @ ডানিজেল এবং মিমক্র্রে এর সাথে একমত নই। তালিকার অবজেক্টস রিকোয়েস্টটি প্রিফিক্স (ফাইল) সহ সুনির্দিষ্ট করে তাই এটি সর্বাধিক সিঙ্গেল মিলে যাওয়া ফাইলটি ফিরিয়ে আনতে হবে, যদি না অন্য ফাইল রয়েছে যার নাম টার্গেট ফাইলটির নামের সাথে শুরু হয়।
ডেভিডব্বেস্টার 48

3

বালতি এবং অবজেক্টে আপনার পাথ ভাঙ্গা। পদ্ধতিটি ব্যবহার করে বালতি পরীক্ষা করা doesBucketExist, তালিকার আকার ব্যবহার করে অবজেক্টটি পরীক্ষা করা (যদি 0 উপস্থিত না থাকে তবে)। সুতরাং এই কোডটি করবে:

String bucket = ...;
String objectInBucket = ...;
AmazonS3 s3 = new AmazonS3Client(...);
return s3.doesBucketExist(bucket) 
       && !s3.listObjects(bucket, objectInBucket).getObjectSummaries().isEmpty();

সহজ এবং সহজ। ধন্যবাদ
থার্মেক

3

অবজেক্ট ইস্টিং ব্যবহার করে। অ্যাডাব্লুএস এস 3-তে নির্দিষ্ট কী উপস্থিত রয়েছে কিনা তা পরীক্ষা করতে জাভা ফাংশন।

boolean isExist(String key)
    {
        ObjectListing objects = amazonS3.listObjects(new ListObjectsRequest().withBucketName(bucketName).withPrefix(key));

        for (S3ObjectSummary objectSummary : objects.getObjectSummaries())
        {
            if (objectSummary.getKey().equals(key))
            {
                return true;
            }

        }
        return false;
    }

2

আসল বস্তুটির ওভারলোড ব্যতীত এসডিকে ভি 2-তে এটি করার সঠিক উপায় হ'ল এস 3 ক্লায়েন্ট.হেডঅবজেক্টটি ব্যবহার করা । আনুষ্ঠানিকভাবে এডাব্লুএস চেঞ্জ লগ দ্বারা সমর্থিত ।

উদাহরণ কোড:

public boolean exists(String bucket, String key) {
    try {
        HeadObjectResponse headResponse = client
                .headObject(HeadObjectRequest.builder().bucket(bucket).key(key).build());
        return true;
    } catch (NoSuchKeyException e) {
        return false;
    }
}

1

JetS3t API এর isObjectInBucket () পদ্ধতি ব্যবহার করে এটি করার একটি সহজ উপায় রয়েছে।

কোডের উদাহরণ:

ProviderCredentials awsCredentials = new AWSCredentials(
                awsaccessKey,
                awsSecretAcessKey);

        // REST implementation of S3Service
        RestS3Service restService = new RestS3Service(awsCredentials);

        // check whether file exists in bucket
        if (restService.isObjectInBucket(bucket, objectKey)) {

            //your logic

        }

এটি হুড + ব্যতিক্রম ক্যাপের
অ্যালেক্সানড্রয়েড

1

অন্যান্য উত্তরগুলি এডাব্লুএস এসডিকে ভি 1 এর জন্য। AWS SDK v2 (বর্তমানে ২.৩.৯) এর জন্য একটি পদ্ধতি এখানে রয়েছে।

নোট করুন getObjectMetadataএবং doesObjectExistপদ্ধতিগুলি বর্তমানে ভি 2 এসডিকে নেই! সুতরাং সেগুলি আর বিকল্প নয়। আমরা হয় ব্যবহার করতে বাধ্য হয় getObjectবা হয় listObjects

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

যদিও কেবল নিরাপদ দিকে থাকতে, আমি range()AWS কে কেবলমাত্র ফাইলের কয়েকটি বাইট প্রেরণ করতে বলার জন্য একটি স্পেসিফিকেশন যুক্ত করেছি । আমি যতদূর জানি এসডিকে সর্বদা এটি সম্মান করবে এবং পুরো ফাইলটি ডাউনলোড করার জন্য আপনাকে চার্জ করবে না। কিন্তু আমি যাচাই করি নি যে নিজের ঝুঁকিতে সেই আচরণের উপর নির্ভর করুন! (এছাড়াও, আমি নিশ্চিত নই rangeযে এস 3 অবজেক্ট 0 বাইট দীর্ঘ হলে কী আচরণ করবে))

    private boolean sanityCheckNewS3Key(String bucket, String key) {

        ResponseInputStream<GetObjectResponse> resp = null;
        try {
            resp = s3client.getObject(GetObjectRequest.builder()
                .bucket(bucket)
                .key(key)
                .range("bytes=0-3")
                .build());
        }
        catch (NoSuchKeyException e) {
            return false;
        }
        catch (AwsServiceException se) {
            throw se;
        }
        finally {
            if (resp != null) {
                try {
                    resp.close();
                } catch (IOException e) {
                    log.warn("Exception while attempting to close S3 input stream", e);
                }
            }
        }
        return true;
    }
}

দ্রষ্টব্য: এই কোডটি ধরে নিয়েছে s3Clientএবং logঘোষণা করা হয়েছে এবং অন্য কোথাও শুরু করা হয়েছে। পদ্ধতিটি একটি বুলিয়ান দেয়, তবে ব্যতিক্রম ছুঁড়ে ফেলতে পারে।


দেখে মনে হচ্ছে এখন এটি s3Client.headObject()করার জন্য ভি 2-তে রয়েছে: stackoverflow.com/a/56949742/9814131 , এবং আপনি গিথুবS3Exception ইস্যু অনুসারে অবজেক্টটি উপস্থিত আছে কিনা তা পরীক্ষা করতে 404 এর স্থিতি কোড 404 পরীক্ষা করবেন github.com/aws/aws-sdk- জাভা-ভি 2 / সংখ্যা / 297 । তবে আমার ধারণা আপনারা আরও প্রগতিশীল যেহেতু এটিতে 0-3 বাইটের মতো খুব কম ওভারহেড রয়েছে।
শানং চেং

1

আমি ব্যবহার করার সময়ও এই সমস্যার মুখোমুখি হয়েছি

String BaseFolder = "3patti_Logs"; 
S3Object object = s3client.getObject(bucketName, BaseFolder);
 

আমি পেয়েছি ত্রুটি কী পাওয়া যায় নি

আমি যখন আঘাত এবং চেষ্টা

String BaseFolder = "3patti_Logs"; 
S3Object object = s3client.getObject(bucketName, BaseFolder+"/");

এটি কাজ করেছে, এই কোডটি 1.9 জার দিয়ে কাজ করছে অন্যথায় 1.11 এ আপডেট হবে এবং উপরের মতো বলা হয়েছে doObjectExist ব্যবহার করুন


1

অন্যদের উল্লেখ করেছি যে, ডেস্কটপ AWS এস 3 জাভা SDK এর 2.10+ জন্য আপনি ব্যবহার করতে পারেন HeadObjectRequest আপনার এস 3 বালতিতে কোনও ফাইল আছে কিনা তা পরীক্ষা করতে অবজেক্টটি । এটি আসলে ফাইল না পেয়ে জিইটি অনুরোধের মতো কাজ করবে।

উদাহরণস্বরূপ কোডগুলি যেহেতু অন্যরা আসলে উপরোক্ত কোনও কোড যুক্ত করেনি:

public boolean existsOnS3 () throws Exception {
    try {
       S3Client s3Client = S3Client.builder ().credentialsProvider (...).build ();
       HeadObjectRequest headObjectRequest = HeadObjectRequest.builder ().bucket ("my-bucket").key ("key/to/file/house.pdf").build ();
       HeadObjectResponse headObjectResponse = s3Client.headObject (headObjectRequest);
       return headObjectResponse.sdkHttpResponse ().isSuccessful ();    
   }
   catch (NoSuchKeyException e) {
      //Log exception for debugging
      return false;
   }
}

NoSuchKeyException নিক্ষেপ করেন
Andrii Karaivanskyi

এর কারণ কীটির অস্তিত্ব নেই। ঠিক এটিই আপনি খুঁজছেন। সুতরাং সেই ব্যতিক্রমটি পরিচালনা করুন এবং এর জন্য মিথ্যা প্রত্যাবর্তন করুন। চেষ্টা / ধরা অন্তর্ভুক্ত করার জন্য আমি উপরের কোডটি আপডেট করেছি।
নেভিগাট্রন

তাহলে আপনার একেবারেই দরকার নেই headObjectResponsethrows Exceptionপাশাপাশি প্রয়োজন হয় না।
Andrii ক্যারাইভান্সকি

@ অ্যান্ড্রাইকারাইভান্সকি এটির একটি উদাহরণ, আমি এটি পরীক্ষা করিনি।
নেভিগাট্রন

headObjectResponse.sdkHttpResponse () .isSuccessful (); ফাইলটি উপস্থিত আছে কি না সর্বদা সফল হয়?
চিহ্নিত করুন

0

বিকল্পভাবে আপনি মিনিও-জাভা ক্লায়েন্ট লাইব্রেরিটি ব্যবহার করতে পারেন , এটির ওপেন সোর্স এবং এডাব্লুএস এস 3 এপিআইয়ের সাথে সামঞ্জস্যপূর্ণ।

আপনি একই জন্য মিনিও-জাভা স্ট্যাটোবজেক্ট.জভা উদাহরণগুলি ব্যবহার করতে পারেন ।

আমদানি io.minio.MinioClient;
আমদানি io.minio.erferences.MinioException;

আমদানি করুন java.io.InputStream;
আমদানি java.io.IOException;
আমদানি করুন java.security.NoSuchAlgorithmException;
আমদানি জাভা.সিকিউরিটি.অনুষ্ঠানিককীএক্সসেপশন;

আমদানি org.xmlpull.v1.XMLPullParserException;


পাবলিক ক্লাস গেটোবজেক্ট {
  পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আরগস)
    NoSuchAlgorithmException, IOException, अवैधKeyException, XMLPullParserException, MinioException th নিক্ষেপ করে {
    // দ্রষ্টব্য: আপনার-অ্যাকসেসকিইআইডি, আপনার সেক্রেটসেস্কেসি এবং আমার-বালতি নামগুলি
    // ডামি মান, দয়া করে এটিকে মূল মানগুলির সাথে প্রতিস্থাপন করুন।
    // সেট এস 3 এন্ডপয়েন্ট, অঞ্চলটি স্বয়ংক্রিয়ভাবে গণনা করা হয়
    MinioClient s3Client = নতুন মিনিওস্লায়েন্ট ("https://s3.amazonaws.com", "আপনার-অ্যাক্সেসকিইআইইডি", "আপনার সেক্রেসিটসিসিএসইইআই");
    ইনপুট স্ট্রিম স্ট্রিম = s3Client.getObject ("আমার-বালতি নাম", "আমার-অবজেক্টনাম");

    বাইট [] বুফ = নতুন বাইট [16384];
    int bytesRead;
    যখন ((বাইট্রেড = স্ট্রিম.ড্রেড (বুফ, 0, বুফ.লেন্থ))> = 0)
      System.out.println (নতুন স্ট্রিং (বুফ, 0, বাইট্রেড));
    }

    স্ট্রিম.ক্লোজ ();
  }
}

আমি আসা করি এটা সাহায্য করবে.

দাবি অস্বীকার : আমি মিনির পক্ষে কাজ করি

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