Ruby on rails AWS::S3写入具有带斜杠字符的键的对象

Ruby on rails AWS::S3写入具有带斜杠字符的键的对象,ruby-on-rails,ruby,amazon-s3,filesystems,Ruby On Rails,Ruby,Amazon S3,Filesystems,这也可能适用于一般的文件系统 在我的例子中,我想在Aws-S3上编写文件,其中键(文件名)实际上是一个url路径 例如: url = "http://example.com/where/are/we/" 那么文件名就是 filename = "where/are/we/" 在S3中写入: s3 = AWS::S3.new s3.buckets[BUCKET].objects["locations/#{filename}"].write(file_contents) 但正如所料,该键在BUC

这也可能适用于一般的文件系统

在我的例子中,我想在Aws-S3上编写文件,其中键(文件名)实际上是一个url路径

例如:

url = "http://example.com/where/are/we/"
那么文件名就是

filename = "where/are/we/"
在S3中写入:

s3 = AWS::S3.new
s3.buckets[BUCKET].objects["locations/#{filename}"].write(file_contents)
但正如所料,该键在
BUCKET/locations/where/are/we/

我最后的办法是
filename.gsub!(“/”、“"”)


任何可能的解决方案/解决方法都会很棒

S3键不是文件夹或文件名。但是很多工具都像处理文件夹和文件一样处理它们(这在IMHO中非常有意义)。因为每个人都会想到文件夹和文件的类比,所以我会像对待文件夹和文件一样对待键。这意味着:不要在关键帧中使用斜杠


另一种方法可能是只添加一个在您的上下文中有意义的文件名。例如,如果您在这样一个键下将web内容存储在bucket中,请将其存储在
where/are/we/index.html
下,而不是仅存储在
where/are/we/

下,我决定使用
filename.gsub!(“/”、“"”)
。因为我们不能在文件名中使用斜杠。

是的,没错,我确实存储了“web-ish”内容,但作为JSON,我想将文件命名为与路径相同的名称。这似乎打破了文件系统的类比,因此我
gsub('/','.'''
)。