我有一个类型为Rails ActionDispatch::Http::UploadedFile的文件对象。
我需要用通用名称覆盖用户指定的文件名,同时保留文件的扩展名。这就是我目前实现代码的方式。有没有一种更好、更优雅的方法可以用Ruby写这篇文章。
extension = File.extname(file_name.original_filename)
file_name.original_filename = "hello#{extension}"
file.original_filename.sub!(/.*./, "hello.")
这是因为.*很贪婪,会把所有东西都咽到最后。它发现。这恰好是延期之前的那个。
或者要做一个确切的替换,你可以只做:
file_name.original_filename = "hello" + File.extname(file_name.original_filename)
从技术上讲,仍然是一个oneliner lol.
编辑:我误解了。(我认为new_name
包含一个扩展,它将被"old_fname"
的扩展所取代。)正如@Bassel所说(谢谢,Bassel),它应该只是:
old_fname = "/a/b/c.hello"
new_fname = "/d/e/f"
new_fname += File.extname(old_fname)