10

私は今、ほとんどすべてをスキャンしましたが、解決策であるほとんどの人は、単に S3 サービスで CORS を構成するだけでした。私は何かが欠けているに違いない。ここに行きます:

クライアント側で Ajax 呼び出しを使用して、ファイルを Amazon S3 にアップロードしようとしています。フォームを送信するだけで機能するため、ポリシー/署名が正しいことはわかっていますが、それを使用してAjax呼び出しを実行しようとすると、

Origin "my host" is not allowed by Access-Control-Allow-Origin. 

エラー。私のフォーム:

<form id="fileform" action="https://mybucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
    <input type="hidden" name="key" value="mykey">
    <input type="hidden" name="AWSAccessKeyId" value="myaccesskey">
    <input type="hidden" name="acl" value="public-read">
    <input type="hidden" name="Content-Type" value="image/jpeg">
    <input type="hidden" name="policy" value="mypolicy">
    <input type="hidden" name="signature" value="mysignature">
  </form>

そして、バケツのCORSでは、私は必死なので、事実上すべてを許可します:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>HEAD</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

ファイルを選択して (クリックするか jQuery を使用して) フォームを送信するのは魅力的ですが、シリアライズされたフォームで Ajax リクエストを実行するとエラーが発生します。

var form = $('#fileform');
$.ajax({
  url: "https://mybucket.s3.amazonaws.com/",
  type: 'post',
  crossDomain: true,
  dataType: 'xml',
  data: form.serialize()
});

これは CORS ルールと関係があることはわかっていますが、ご覧のとおり、設定されています。したがって、他に何が間違っているのか誰にもわかりませんか?

ありがとう。

4

2 に答える 2

2

<input type="file" name="uploadFile" />ファイルがないとメソッドを使用してファイルデータを投稿できないため、さらに HTML タグを追加できますserialize()serializeArray()の代わりに使用することをお勧めしますform.serialize()

于 2014-02-23T13:10:37.067 に答える