我有一个 Rails ActionDispatch::Http::UploadedFile 类型的文件对象。
我需要用通用名称覆盖用户分配的文件名,同时保留文件的扩展名。这就是我目前实现代码的方式。有没有一种更好更优雅的方式在 Ruby 中编写它。
extension = File.extname(file_name.original_filename)
file_name.original_filename = "hello#{extension}"
我有一个 Rails ActionDispatch::Http::UploadedFile 类型的文件对象。
我需要用通用名称覆盖用户分配的文件名,同时保留文件的扩展名。这就是我目前实现代码的方式。有没有一种更好更优雅的方式在 Ruby 中编写它。
extension = File.extname(file_name.original_filename)
file_name.original_filename = "hello#{extension}"
编辑:我误解了。(我认为new_name
包括一个将被"old_fname"
' 的扩展名替换的扩展名。)正如@Bassel 所说(谢谢,Bassel),它应该只是:
old_fname = "/a/b/c.hello"
new_fname = "/d/e/f"
new_fname += File.extname(old_fname)
file.original_filename.sub!(/.*\./, "hello.")
这是有效的,因为 .* 是贪婪的,并且会吞噬一切直到最后。它发现。那恰好是扩展之前的那个。
或者做一个精确的替换,你可以这样做:
file_name.original_filename = "hello" + File.extname(file_name.original_filename)
从技术上讲,仍然是单线哈哈。