2015-12-27 24 views
5

जावा8 और aws-java-sdk 1.10.43 का उपयोग कर S3 प्री-साइन किए गए यूआरएल तक नहीं पहुंच सकता है। मैं एक एस 3 फ़ाइल में प्री-सिग्नल यूआरएल प्राप्त करने की कोशिश कर रहा हूं। मैं एक लिंक वापस मिलता है, लेकिन यह करने के लिए ब्राउज़ कर इस त्रुटि के लिए नेतृत्व:प्राधिकरण

authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256

बल देने के लिए, मैं करने के लिए जावा कोड का उपयोग नहीं करने के लिए एक URL ईमेल के माध्यम से भेजा जा सकता है कि और खोला एक ब्राउज़र में उत्पन्न करने के लिए चाहते हैं, उस यूआरएल से पढ़ें।

मैं बोले कोड का उपयोग कर रहा हूं, और मुझे लगता है कि मुझे किसी भी तरह से सेट करने के लिए सेट एसएसई एल्गोरिदम को "v4" सेट करने की आवश्यकता है, हालांकि मैं इसे काम करने में विफल रहा हूं। मैं क्या खो रहा हूँ? मैं क्या कॉन्फ़िगर करना चाहिए:

Date expiration = <some date>; 
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, targetPath); 
generatePresignedUrlRequest.setMethod(HttpMethod.GET); 
generatePresignedUrlRequest.setExpiration(expiration); 

AmazonS3 s3client = new AmazonS3Client(s3Credentials); 
URL s = s3client.generatePresignedUrl(generatePresignedUrlRequest); 

यूरोपीय संघ और केंद्रीय-1

धन्यवाद पर बाल्टी है (ध्यान दें मैंने जान-बूझकर विन्यास फाइल से परहेज कर रहा हूँ, मैं वातावरण चर से सभी विशेषताओं सेट करने के लिए कोड इच्छा)

+0

वहां प्रस्तावित समाधान में मदद नहीं मिली - संपत्ति को अभी भी उसी परिणाम से उत्पन्न किया गया। क्लर्किफ़ाई करने के लिए: मैं एक यूआरएल उत्पन्न करने में सक्षम हूं जो एक निर्धारित यूआरएल के रूप में प्रतीत होता है, हालांकि ब्राउज़र में उस यूआरएल को चिपकाकर त्रुटि संदेश होता है। मैं अपने जावा कोड का उपयोग कर सामग्री को पढ़ने की कोशिश नहीं कर रहा हूं, लेकिन मैं ब्राउज़र में चिपकने के लिए एक यूआरएल उत्पन्न करना चाहता हूं (उदाहरण के लिए ईमेल के माध्यम से भेजें) – user2339344

+0

प्री-हस्ताक्षरित यूआरएल उत्पन्न करना वास्तविक एस 3 सेवा के साथ बातचीत किए बिना किया जाता है, इसलिए यह समझ में आता है कि आपका कोड उस बिंदु पर "काम करता है" और यूआरएल का उपयोग होने पर त्रुटि होती है। क्या आपके द्वारा उत्पन्न किए गए हस्ताक्षरित यूआरएल में 'हस्ताक्षर = '? ... शामिल है या यह' x-amz-signature =' है? –

+0

हस्ताक्षर = । यहां मुझे प्राप्त यूआरएल का एक उदाहरण दिया गया है: https: // ? AWSAccessKeyId = और समाप्ति = 1451297351 और हस्ताक्षर = 1kD1IQfn2gfmJ% 2Fa2Wp2ZORVte0Y% 3 डी – user2339344

उत्तर

5

कुछ मदद मैं इस सवाल का जवाब मिल गया है, जो 2 लापता टुकड़े का एक संयोजन (जिनमें से एक टिप्पणी में करने के लिए भेजा गया था) था का उपयोग करना:

  1. इस सेट करने की आवश्यकता:

    s3Client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true)); 
    
    :

    s3Client.setEndpoint(endpoint); 
    

वैकल्पिक रूप से यह भी जोड़ने के लिए उपयोगी हो सकता है:

System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true"); 
  • "endpoint" (जो अपलोड या डाउनलोड के लिए की आवश्यकता नहीं थी) को सेट करना होगा

  • +0

    यह काम करता है ... मैंने केवल '2' बिंदु निष्पादित किया है। – Tirath

    संबंधित मुद्दे