1

我有一个 Rails ActionDispatch::Http::UploadedFile 类型的文件对象。

我需要用通用名称覆盖用户分配的文件名,同时保留文件的扩展名。这就是我目前实现代码的方式。有没有一种更好更优雅的方式在 Ruby 中编写它。

extension = File.extname(file_name.original_filename)
file_name.original_filename = "hello#{extension}"
4

2 回答 2

0

编辑:我误解了。(我认为new_name包括一个将被"old_fname"' 的扩展名替换的扩展名。)正如@Bassel 所说(谢谢,Bassel),它应该只是:

old_fname = "/a/b/c.hello" 
new_fname = "/d/e/f"

new_fname += File.extname(old_fname)
于 2015-10-29T23:53:07.373 回答
0
file.original_filename.sub!(/.*\./, "hello.")

这是有效的,因为 .* 是贪婪的,并且会吞噬一切直到最后。它发现。那恰好是扩展之前的那个。

或者做一个精确的替换,你可以这样做:

file_name.original_filename = "hello" + File.extname(file_name.original_filename)

从技术上讲,仍然是单线哈哈。

于 2015-10-29T23:41:43.583 回答