PHP अमेज़ॅन एडब्ल्यूएस एस 3 - प्री-सिग्नल यूआरएल का उपयोग कर ऑब्जेक्ट अपलोड करें - php, अमेज़ॅन-वेब-सर्विसेज, अमेज़ॅन-एस 3

मैं एक यूआरएल उत्पन्न करने की कोशिश कर रहा हूं कि अन्य सिस्टम मेरी एस 3 बाल्टी में फ़ाइल अपलोड करने के लिए उपयोग कर सकता है। मैंने प्रलेखन और इसी तरह के मुद्दों पर ध्यान दिया, हालांकि, मुझे सही समाधान नहीं मिल रहा है।

मैंने प्रीसाइंड किए गए यूआरएल को कई तरीकों से बनाने की कोशिश की है ($this->s3 एक संदर्भ है इसलिए S3Client):

1:

       $signedUrl = $this->s3->getCommand(
"PutObject",
array(
"Bucket" => $this->bucket,
"Key" => "recording_test.mp3",
"Body" => ""
)
)->createPresignedUrl("+2 hours");

2:

    $command = $this->s3->getCommand("PutObject", array("Bucket" => $this->bucket, "Key" => "recording_test3.mp3", "Body" => ""));

$request = $command->prepare();

$signedUrl = $this->s3->createPresignedUrl($request, "+2 hours");

यूआरएल तक पहुंचने का प्रयास करते समय मुझे निम्न त्रुटि मिलती है:

The request signature we calculated does not match the signature you provided. Check your key and signing method.

मैंने इस तरह से भी कोशिश की है: $ key = "recording_test2.mp3"; $ url = $ this-> बाल्टी। "/"। $ कुंजी;

    $request = $this->s3->put($url);

$signedUrl = $this->s3->createPresignedUrl($request, "+2 hours");

हालांकि, यह प्रारूप में एक यूआरएल उत्पन्न करता है s3.amazonaws.com/bucket/key..., जो अमान्य अंतराल के बारे में एक त्रुटि उत्पन्न करता है, और प्रारूप में उस समापन बिंदु bucket.s3.amazonaws.com/key... इस्तेमाल किया जाना चाहिए। यूआरएल को मैन्युअल रूप से बदलना उपर्युक्त के अनुसार एक ही अमान्य हस्ताक्षर त्रुटि देता है।

मैं नहीं देख सकता कि मैं गलत हस्ताक्षर कर रहा हूं या प्रीसाइंड यूआरएल उत्पन्न करने का कोई अन्य तरीका क्या कर रहा हूं?

मदद के लिए धन्यवाद

उत्तर:

जवाब के लिए 0 № 1

अपना हस्ताक्षरित यूआरएल बनाते समय, आपको इसका उपयोग नहीं करना चाहिए Body कुंजी। हस्ताक्षरित यूआरएल में अपलोड किए जाने वाले शरीर के हस्ताक्षर शामिल हैं। फिर, जब आप URL का उपयोग करके फ़ाइल अपलोड करने का प्रयास करते हैं, तो यह उस फ़ाइल की सामग्री पर उपयोग की जाने वाली खाली स्ट्रिंग से मेल नहीं खा सकता है।

साथ ही, यदि आप फ़ाइल को रखने के लिए कर्ल का उपयोग कर रहे हैं, तो मैं CURLFile का उपयोग करने की सलाह देता हूं, और उपयोग करना याद रखता हूं curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); आपके पुट अनुरोध के लिए।


संबंधित सवाल
सबसे लोकप्रिय