文件名中的特殊字符影响aws-sdk ruby​​ gem url_for方法

Joe*_*der 5 ruby ruby-on-rails amazon-s3 ruby-on-rails-3

我正在使用官方的AWS ruby​​ gem for S3,我在使用"url_for"方法时遇到问题,因为它们中包含特殊字符的文件(即逗号,撇号).我正在使用最新的aws-sdk gem用于ruby,我的代码如下所示:

s3 = AWS::S3::new
bucket = s3.buckets[bucket]
object = bucket.objects[object_address]
object_url = object.url_for(:read, :expires => 60*60, :secure => true)
Run Code Online (Sandbox Code Playgroud)

正确找到该对象,但是我从url_for获取的URL给出了HTTPError:404 Not Found错误.如果文件名中没有逗号或撇号,它可以正常工作.

有没有办法处理这个,而不需要首先限制文件名?

iwa*_*bed 2

默认情况下是否转义 URL 字符串?例如:

object_url =  CGI.escape(object.url_for(:read, :expires => 60*60, :secure => true))
Run Code Online (Sandbox Code Playgroud)

这将正确地将字符串转义为浏览器可读的格式。我对所有安全 S3 URL 都执行此操作,因为有时签名中存在/or+字符,如果未正确转义,也会导致链接失败。这也将正确地转义逗号和撇号。