在我的Ruby应用程序中,我有一个我用AWS设置的文件上传。将上传的文件显示给用户时,我只想显示上传文件的名称,而不是整个文件。
在我看来,我正在使用:
<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字符串,然后再在“?”处拆分。我尝试过slash
和chomp
但似乎无法正确格式化。这是合适的方法吗?
答案 0 :(得分:3)
你应该创建一个帮助器,它将file.file_url
转换为&#34; File_name.pdf&#34;,它将如下所示:
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' %>
答案 1 :(得分:0)
new_str = str.slice(0..(str.index('?')))
后, ?
将剪切文件名
其中str
是您当前的文件名,new_str
将是剪切版本。
//编辑
new_str
仍将包含?
如果您不希望发生这种情况,请尝试使用new_str = str.split('?')[0]