0

ほとんどのディレクトリがわかっているが、データベース内のファイルの ID に基づいて変化する 1 つのフォルダーがあり、ファイル file の名前がユーザーがファイルに付けた名前に基づいている場合、ファイルを開く方法はありますか。たとえば、以下のコードでは、id はデータベース内のファイルの ID に基づいて変更され、フォルダー名はユーザーの名前に基づいて変更されます。私の場合、ファイルの拡張子も変更される可能性があります。

File.open("/public/emails/:id/:filename") 
4

2 に答える 2

1

Fileモデルにこのすべてのメタデータを保存することをお勧めします。次に、文字列補間の単純なケースです。

file = File.find(...)
File.open("/public/emails/#{file.id}/#{file.name}.#{file.extension}")

もちろん、これにより、インジェクション スタイルの攻撃 (たとえば、ユーザーが自分のファイル../../../../boot/grub.confなどに名前を付けた場合) に対して無防備になりますが、これはアプリケーション固有であり、実装する必要があります。

于 2012-07-22T17:36:53.217 に答える
0

次のようなパスにモミとファイル名を追加することに問題はありますか

dir = "2" # the name of dir from database entry
filename = "abc"
extension = ".png"
path = "path/dir/#{dir}/#{filename}#{extension}"

File.open(path)
于 2012-07-22T17:37:02.907 に答える