まず、ruby の aws-sdk を使用していますが、私が直面しているのは、S3 の署名付き投稿の誤解のようです。
私ができるようにしたいのは、署名付きの投稿で S3 にアップロードされたものはすべてビデオであることを確認することです。
私がやろうとしたことはcontent_type_starts_with: "video/"
、presigned_post ハッシュに設定することです。これにより、すべてのアップロードが で拒否されPolicy Condition failed: ["starts-with", "$Content-Type", "video/"]
ます。
次に、 だけを試しましたcontent_type: "video/mp4"
が、これにより、s3 は任意のファイルのアップロードを許可Content-Type: "video/mp4"
し、メタデータでタグ付けするだけです。
その後、Content-Type の制約なしでファイルをアップロードすると、S3 がファイルに としてタグ付けすることに気付きましたbinary/octet-stream
。そこで、最初の方法をもう一度試しましたが、今回はcontent_type_starts_with: "binary/"
. 前と同じ結果、Policy Condition Failed
.
Content-Type フィールドはどのように使用すればよいですか? 私がやりたいことを決してやらないようです。
私が使用しているコードのスニペットは次のとおりです。
# In the controller
client = Aws::S3::Client.new(region: 'us-east-1')
resource = Aws::S3::Resource.new(client: client)
bucket = resource.bucket("my-bucket")
object_id = SecureRandom.uuid
object = bucket.object(object_id)
@presigned_post = object.presigned_post({
acl: "private",
content_length_range: 0..104857600, # 100 MB
content_type_starts_with: "video/",
})
# In the presigned post erb
<form action="<%= presigned_post.url %>" method="post" enctype="multipart/form-data">
<% presigned_post.fields.each do |name, value| %>
<input type="hidden" name="<%= name %>" value="<%= value %>"/>
<% end %>
<input type="file" name="file" accept="*.mp4,*.ogg,video/*" />
<input type="submit">
</form>