如果您知道大部分目录,是否有一种方法可以打开文件,但是有一个文件夹会根据数据库中文件的 id 而更改,并且文件文件的名称基于用户命名文件的名称。例如,在下面的代码中,id 将根据数据库中文件的 id 更改,文件夹名称将根据用户命名它的名称更改。在我的情况下,文件的扩展名也可以改变。
File.open("/public/emails/:id/:filename")
如果您知道大部分目录,是否有一种方法可以打开文件,但是有一个文件夹会根据数据库中文件的 id 而更改,并且文件文件的名称基于用户命名文件的名称。例如,在下面的代码中,id 将根据数据库中文件的 id 更改,文件夹名称将根据用户命名它的名称更改。在我的情况下,文件的扩展名也可以改变。
File.open("/public/emails/:id/:filename")
我建议您的File
模型存储所有这些元数据。那么这是一个简单的字符串插值案例:
file = File.find(...)
File.open("/public/emails/#{file.id}/#{file.name}.#{file.extension}")
这当然会让您容易受到注入式攻击——例如,如果用户命名他们的文件../../../../boot/grub.conf
或其他东西——但这是特定于应用程序的,由您来实现。
将冷杉和文件名附加到路径是否有任何问题,例如
dir = "2" # the name of dir from database entry
filename = "abc"
extension = ".png"
path = "path/dir/#{dir}/#{filename}#{extension}"
File.open(path)