2

次のような URL を受け入れる必要があります。 https://aidin.s3.amazonaws.com/appname/bucket/folder/faxattach/bXs9FerLJR1tnhs3z?AWSAccessKeyId=ACCEDD_KEY&Expires=1372360744&Signature=SIGNATURE

その URL が有効で、有効期限が切れていないかどうかを確認します。

私はいくつかの異なることを試しましたが、それらはエラーになる傾向があります。例えば:

url = URI.parse("https://aidin.s3.amazonaws.com/appname/bucket/folder/faxattach/bXs9FerLJR1tnhs3z?AWSAccessKeyId=ACCEDD_KEY&Expires=1372360744&Signature=SIGNATURE")
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path)

これにより Net::HTTPBadResponse: wrong status line: "\x15\x03\x01\x00\x02\x02"、URL が有効かどうかがわかります。

4

2 に答える 2

1

自分でこれに遭遇しただけで、これが私にとってそれを修正したものです:

url      = URI.parse(url_param)
http     = Net::HTTP.new(url.host, url.port)

http.use_ssl = true if url.scheme == 'https'

response = http.request_head(url.path)

間違ったステータス行は、S3 がいずれかである場合に、Net ライブラリがリクエストを HTTP として扱うことが原因です。ブール値のuse_ssl割り当ては、スキームが HTTPS であることが条件です。

于 2014-01-31T17:51:18.137 に答える
0

aws-s3 gem ( https://github.com/marcel/aws-s3 )を使用できます

S3Object.exists? 'headshot.jpg', 'photos'
于 2013-06-26T20:53:17.370 に答える