2013-08-20 9 views
5

amazon s3に直接アップロードできるようにする、FineUploaderの新機能を使用しようとしています。現在、私は写真をアップロードすることができません。エラーが表示されます: "無効なポリシー文書またはリクエストヘッダーです!"amazon s3用にfineuploaderを使用しているときに、無効なポリシー文書またはリクエストヘッダーエラーが発生しました

開発者は質問がここにstackoverflowで投稿されるように頼んだ。

私はこのページに自分の指示に従ってています: https://github.com/Widen/fine-uploader-server/blob/master/php/s3/s3demo.php

私はJavascriptを設定している:

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

私はたくさんのpこれが私のために間違っていたかもしれないひも。私は前にs3やfineuploaderを使用したことはありません。しかし、ここに私がセットアップで最も混乱していると感じた場所があります。私は問題を感じている#1にある:

(1)の例では、これは、署名へのパスが設定されているかのjavascriptです:

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

ことが意図されている場合、私は確認されませんでしたいくつかのjsonが作成された空のファイルか、jsonを作成する関数がある場合は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パネルに行き、正確に指示からコピーしたポリシーを持つグループを作成しましたが、私のバケツの実際の名前:

その後、javascriptファイルとphpファイルで使用されていたパブリックおよびプライベートアクセスキーを取得したユーザーです。このスクリプトでは、ユーザー名は特に使用されていません。

ここで私が間違ってやったことが本当に明白であると思っています。御時間ありがとうございます。

+1

質問(1)に答えるには'signature.endpoint'オプションはphpスクリプトを指していなければなりません。 –

答えて

2

私が正しく理解していれば、単純なアップロードのリクエストに署名しようとすると、「無効なポリシー文書...」というメッセージがクライアント側に表示されています。また、s3demo.phpのPHPサーバー側の例を使用しています。

私があなたの変更で目にする最大の問題は、$expectedBucketです。あなたのバケツは "http://thenameofmybucket.s3.amazonaws.com"ではなく、 "それはマイバケット"です。おそらく、サーバーサイドのコードは、バケツの名前が "thenameofmybucket"であることを確認すると、バケットの名前が "http://thenameofmybucket.s3.amazonaws.com"であるため、ポリシーを拒否している可能性があります。その行を$expectedBucket = "thenameofmybucket";に変更します。

また、あなたの質問に基づいて、クライアント側の秘密鍵をどこに保管しているかは不明です。あなたの秘密鍵が、例えば "12345"ならば、あなたはこのようなコード行を持っていますか?

$clientPrivateKey = $_SERVER['12345'];

もしそうなら、これはあなたのサーバー側のコードに別の問題です。 PHPの$_SERVER superglobalは、おそらくあなたの秘密鍵を含む "12345"という名前の環境変数を探しています。そのような変数を設定していない場合は、そのようにするか、おそらく$clientPrivateKeyという値を自分の秘密鍵に設定します。

また、ここではクロスオリジン環境で実際に作業していますか?あなたのようには見えません。その場合、PHPの例では、「CORS」または「クロスオリジン」または「クロスドメイン」と記されたものは必要ありません。

UPDATE:
あなたがアップロード上の任意のサイズ制限の制限を設定されていない場合にもnullにグローバル$expectedMaxSizeを設定する必要があります。私たちは今やPHP example for Fine Uploader S3を更新しています。

+0

これらのエラーをすべてキャッチしてくれてありがとう。私は$ expectedBucketを変更し、私の鍵でコード行を修正しました。しかし、私はまだ同じエラーが発生しているので、何か間違っていると思います。 –

+0

@EBlair今はすべて動作していますか? –

+0

ありがとうございます - 残念ながら、いいえ。 CORP関連のコードをPHPのサンプルから削除する必要がありますか? –

関連する問題