我正在使用carrierwave-aws
gem,我在尝试引用上传的文件名时遇到了一个问题。在我的数据库中,我将文件名存储为filename
。当我在erb模板上检索Model.filename
时,会返回以下内容:
http://s3-us-west-1.amazonaws.com/*****/*****/*****/image.png
之前是否有其他人遇到此问题?我只想返回原始文件名(使用上面的例子,我只想返回image.png
)。我不希望用它返回任何其他http://信息。
数据库级别没有出现此问题,因为我的文件在数据库中存储为image.png
。我还运行了从数据库返回到rails应用程序的模型对象的跟踪,返回的结果只是image.png
。
由于数据库返回了正确的结果,我是否应该查看其他内容以确定在视图级别修改结果的原因?
为了解决这个问题,我尝试重命名模型的filename
字段,这会返回相同的问题结果。结果似乎是与store_dir
(在上传器类中实现)加上文件名的某种组合。
提前致谢
附加说明:
如果我将Model对象返回到erb模板并将其输出为<%= obj.inspect %>
,则文件名将按预期返回image.png
。但是,当我提出<%= obj.filename %>
时,我发现了上述问题,并在名称后附加了一个完整的网址字符串。
似乎在模型中安装上传器会导致问题。当我从模型中删除以下代码时,我可以看到实际的文件名,因为它出现在我的数据库中:
mount_uploader :filename, ImagesUploader
我仍然不确定如何在安装上传器时让文件名返回到erb。任何意见,将不胜感激。谢谢!
答案 0 :(得分:0)
在检查了我的对象可用的方法后,我终于明白了这一点。
要获取原始文件名,我使用以下模式:
<%= Model.Mounted_Uploader_Name.file.Database_Column %>
在我的具体实例中,代码如下所示:
<%= obj.filename.file.filename %>
这给了我原始文件名(以及存储在我的数据库中的名称) image.png ,但没有附加任何额外的文字。
希望这有帮助。