2013-08-20 14 views
5

के लिए fineuploader का उपयोग करते समय अमान्य नीति दस्तावेज़ या अनुरोध हेडर त्रुटि प्राप्त करना मैं FineUploader की नई सुविधा का उपयोग करने की कोशिश कर रहा हूं जो सीधे अमेज़ॅन एस 3 पर अपलोड करने की अनुमति देता है। वर्तमान में, मैं फोटो अपलोड करने में सक्षम नहीं हूं। मुझे त्रुटि मिल रही है: "अमान्य नीति दस्तावेज़ या अनुरोध शीर्षलेख!"अमेज़ॅन एस 3

डेवलपर्स ने पूछा कि प्रश्न स्टैक ओवरफ्लो पर यहां पोस्ट किए जाएंगे।

मैं इस पेज पर उनके निर्देशों का पालन कर रहा हूँ: https://github.com/Widen/fine-uploader-server/blob/master/php/s3/s3demo.php

मैं अपने जावास्क्रिप्ट की स्थापना की है:

http://blog.fineuploader.com/2013/08/16/fine-uploader-s3-upload-directly-to-amazon-s3-from-your-browser/#guide

चीजों की स्थापना में, मैं भी उदाहरण फ़ाइल वहाँ से जुड़ा हुआ नकल करते है इस प्रकार बहुत कम विकल्पों के साथ:

$('#fineuploader-s3').fineUploaderS3({ 
      request: { 
       endpoint: "http://thenameofmybucket.s3.amazonaws.com", 
       accessKey: “mypublicaccesskey” 
      }, 

      signature: { 
       endpoint: "s3demo.php" 
      }, 

      iframeSupport: { 
       localBlankPagePath: "/success.html" 
      }, 

     cors: { 
       expected: true 
      } 
    }); 

मुझे पता है कि बहुत सारे पी हैं लेस जहां यह मेरे लिए गलत हो सकता था। मैंने पहले कभी एस 3 या फाइनअपलोडर का उपयोग नहीं किया है, इसलिए माफ करना अगर ये गूंगा प्रश्न हैं। लेकिन यहां ऐसे स्थान हैं जहां मुझे स्थापित करने में सबसे उलझन में लगा। मैं एक समस्या महसूस कर रही है # 1 में निहित है:

(1) उदाहरण जावास्क्रिप्ट, यह कैसे हस्ताक्षर करने के लिए पथ सेट किया गया है में: अगर है कि क्या मतलब है

// REQUIRED: Path to our local server where requests can be signed. 
      signature: { 
     endpoint: "/s3/signtureHandler" 
      }, 

मुझे यकीन है कि नहीं था एक खाली फ़ाइल होने के लिए जहां कुछ जेसन बनाया गया है या यदि यह php स्क्रिप्ट को इंगित करना है, जहां जेसन बनाने का कार्य है, तो मेरे मामले में s3demo.php है, जिसे मैंने सीधे कॉपी किया था।

(2) s3demo.php फ़ाइल में, केवल लाइनों मैं बदल इन थे:

$clientPrivateKey = $_SERVER['I put my private key here']; 

$expectedBucket = "http://thenameofmybucket.s3.amazonaws.com"; 

function handlePreflightedRequest() { 
    // If you are relying on CORS, you will need to adjust the allowed domain here. 
    header('Access-Control-Allow-Origin: http://mywebsitename.org'); 
} 

(3) यह वही है मैं अपने CORS फ़ाइल के लिए है, मुझे यकीन है कि अगर यह था नहीं था सही क्योंकि अनुदेशात्मक पृष्ठ पर उदाहरण टैग शामिल नहीं है:

<CORSRule> 
     <AllowedOrigin>http://mywebsitename.org</AllowedOrigin> 
     <AllowedMethod>POST</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 

(4) के रूप में दिए गए निर्देशों में विस्तृत जानकारी दी, मैं IAM पैनल में चला गया और नीति निर्देश वास्तव में से नकल के साथ एक समूह बनाया है, लेकिन मेरी बाल्टी के वास्तविक नाम के साथ:

{ 
    "Version":"2012-10-17", 
    "Statement":[{ 
    "Effect":"Allow", 
    "Action":"s3:PutObject", 
    "Resource":"arn:aws:s3:::thenameofmybucket/*” 
    }] 
} 

, फिर एक उपयोगकर्ता जिस से मैंने क्रमशः जावास्क्रिप्ट और PHP फ़ाइलों में उपयोग की जाने वाली सार्वजनिक और निजी एक्सेस कुंजियां प्राप्त कीं। उपयोगकर्ता नाम विशेष रूप से स्क्रिप्ट में कहीं भी उपयोग नहीं किया जाता है।

मुझे आशा है कि कुछ सचमुच स्पष्ट है कि मैंने गलत तरीके से किया है। आपके समय के लिए धन्यवाद।

+1

प्रश्न का उत्तर देने के लिए (1)। 'Signature.endpoint' विकल्प को php स्क्रिप्ट को इंगित करना चाहिए। –

उत्तर

2

यदि मैं सही ढंग से समझता हूं, तो आप एक साधारण अपलोड के अनुरोध पर हस्ताक्षर करने का प्रयास करते समय "अमान्य नीति दस्तावेज़ ..." संदेश क्लाइंट-साइड देख रहे हैं। आप s3demo.php भी PHP सर्वर-साइड उदाहरण प्रदान कर रहे हैं।

आपके परिवर्तनों के साथ सबसे बड़ी समस्या यह है कि $expectedBucket चर है। आपकी बाल्टी "http://thenameofmybucket.s3.amazonaws.com" नहीं है, यह "thenameofmybucket" है। सबसे अधिक संभावना है कि सर्वर-साइड कोड पॉलिसी को अस्वीकार कर रहा है क्योंकि यह "http://thenameofmybucket.s3.amazonaws.com" नामक बाल्टी की उम्मीद कर रहा है, जब मुझे यकीन है कि आपकी बाल्टी वास्तव में "thenameofmybucket" नामित है। उस रेखा को $expectedBucket = "thenameofmybucket"; पर बदलें।

इसके अलावा, यह स्पष्ट नहीं है कि आप अपने प्रश्न के आधार पर अपनी क्लाइंट-साइड गुप्त कुंजी कहां संग्रहीत कर रहे हैं। अगर आपकी गुप्त कुंजी है, तो कहें, "12345", क्या आपके पास ऐसा कोड है जो इस तरह दिखता है?

$clientPrivateKey = $_SERVER['12345'];

यदि हां, तो यह आपके सर्वर-साइड कोड के साथ एक और समस्या है। PHP में $_SERVER सुपरग्लोबल "12345" नामक एक पर्यावरण चर की तलाश में है, संभवतः, आपकी गुप्त कुंजी शामिल है। यदि आपने ऐसा चर सेट अप नहीं किया है, तो या तो ऐसा करें, या, शायद, अपनी गुप्त कुंजी पर $clientPrivateKey का मान सेट करें।

इसके अलावा, क्या आप वास्तव में यहां एक क्रॉस-उत्पत्ति वातावरण में काम कर रहे हैं? ऐसा लगता है कि आप नहीं हैं। यदि ऐसा है, तो आपको PHP उदाहरण में "CORS" या "क्रॉस-उत्पत्ति" या "क्रॉस-डोमेन" चिह्नित किसी भी सामग्री की आवश्यकता नहीं है।

अद्यतन:
अगर आपको अपलोड पर किसी भी आकार की सीमा प्रतिबंध सेट नहीं कर रहे हैं null को $expectedMaxSize वैश्विक स्थापित करना चाहिए। हम PHP example for Fine Uploader S3 को कुछ सुधार और स्पष्टीकरण के साथ अपडेट कर रहे हैं जो भविष्य में दूसरों की मदद करनी चाहिए।

+0

उन सभी त्रुटियों को पकड़ने के लिए धन्यवाद। मैंने $ अपेक्षित बाल्टी बदल दी, और मेरी कुंजी के साथ कोड की रेखा तय की। लेकिन मुझे अभी भी वही त्रुटि मिल रही है, इसलिए मुझे लगता है कि कुछ और गलत भी है। –

+0

@EBlair अब सबकुछ काम कर रहा है? –

+0

पूछने के लिए धन्यवाद - दुर्भाग्य से, नहीं। क्या मुझे php उदाहरण से कुछ सीओआरएस संबंधित कोड को हटाने की ज़रूरत है? –