5Mb 未満などの小さなファイルの場合、署名付き URL を介した S3 へのアップロードは正常に機能します。これよりも大きなものをアップロードしようとすると400 Bad Request
、S3 からRequestTimeout
エラーとして応答が返されるようです。
curl を使用してこれを再現できます。
# Create a test file:
mkfile -n 20m ./testfile
# Get the presigned URL
curl -XPOST http://localhost:3000/uploads -d "filename=testdata"
# Upload to S3
curl -H "Content-Type: binary/octet-stream" -XPUT -vvv -T testfile "<Presigned URL>"
署名コードは次のようになります。
@presigned_url ||= Aws::S3::Presigner.new.presigned_url(
:put_object,
bucket: ENV['AWS_BUCKET'],
key: key,
acl: 'private',
expires_in: 3600,
content_type: 'binary/octet-stream'
)
これは 5Mb 未満のファイルでは問題なく機能しますが、ファイル サイズが大きくなるにつれて、より頻繁に障害が発生することに注意してください。これらの問題を見て解決した人はいますか?