2015-09-06 65 views
0

在我的Ruby应用程序中,我有一个使用AWS设置的文件上传。当向用户显示上传的文件时,我只想显示上传文件的名称,而不是整个文件。在Ruby on Rails中提取字符串的子集

在我看来,我使用:

<td> 
    <%= link_to file.file_url.split('/').last, file.file_url, target: '_blank' %> 
</td> 

,输出像File_name.pdf代替https://bucket_name.s3-us-west.../file_name.pdf,而这正是我需要的。

但是,对于某些文件上传,有参数附加到文件名,所以我得到类似于File_name.pdf?AWSAccessKeyID=1234&Expires=1234。当在视图中显示时,它看起来很丑陋。

我想在最后一个斜线处分割文件URL字符串,然后再在“?”处分割。我试过slashchomp,但似乎无法正确格式化。这是适当的方法吗?

回答

3

你或许应该创建一个帮助其将采取file.file_url,并将其转换为“FILE_NAME .PDF”,它看起来就像这样:

def aws_file_name(url) 
    uri = URI.parse(url) # => #<URI::HTTPS https://bucket_name.s3-us-west/.../File_name.pdf?AWSAccessKeyID=1234&Expires=1234> 
    File.basename(uri.path) # => "File_name.pdf" 
end 

然后:

<%= link_to aws_file_name(file.file_url), file.file_url, target: '_blank' %> 
0

new_str = str.slice(0..(str.index('?')))将削减文件名的?
中第一次出现后,其中str是您当前的文件名和new_str将是剪辑版。

//编辑
new_str仍将包含?
,如果你不希望这种事情发生,然后尝试使用new_str = str.split('?')[0]