質問

ユーザーが送信したファイルをホスティングする予定です。ファイルからデータを取得して、それをディレクトリに移動する必要があります。

このファイルの存続期間中に重要な点が 2 つあります。1 つ目はデータが抽象化されるとき、2 つ目はファイルが共有できるようにアーカイブされるときです。

データが抽象化されている場合、他の既存のファイルが上書きされないように、ファイル名を一意の名前に変更するか、ファイル名に一意の文字列を追加するのがよいと考えました。

ファイルをアーカイブする場合、私は 3 つの戦略を考えました。1 つは、特定のデータからアップロードされたすべてのファイルを 1 つのフォルダーに保存することです。(2006/9/4、2008/1/05) もう 1 つは、フォルダーを保持し、フォルダー内に保持したいファイルの最大数までそのフォルダーを埋め続けてから、別のフォルダーを作成する方法です (/folder001/、/folder002/、 /folder003/ など)。もう 1 つは、あるしきい値に達したときにサブフォルダーを作成することです。したがって、(/j/jd/jde/jdelator) のように、UNIX でこれを見たことがありますが、これをどのように説明するかわかりません。

私が疑問に思っているのは、皆さんがどのような戦略を有用だと考えているか、または使用しているかということです。

役に立ちましたか?

解決

データが抽象化されている場合は、次のようなものを選択します。 filename + millisec();millisec への 2 つの呼び出しが同じになる可能性は低く、アクセスする際にはファイル名がより使いやすくなります。

古いファイルや未使用のファイルを削除する場合は、日付戦略が便利です。ログによると、2006 フォルダを取得し、過去 1 年間にアクセスされていないものをすべて削除するだけで済みます。これは、ユーザーにとって、それが新しいファイルかどうかを知るための良い指標にもなります。フォルダー XYZ はこのものの変形にすぎず、N ファイルごとに日付をタグに置き換えます。

しきい値サブフォルダーを使用すると、ディレクトリのエントリ数を低く抑えることができるため、アクセスが速くなります。この解決策では、特定のディレクトリが大きくなったときに、ファイルを移動する必要がある (マップされていない場合は URL を壊す) 必要があることに注意してください。

もう 1 つの可能性は、ファイル名の場所に対応する UID を持つ DB を使用し、次の方法でファイルにアクセスすることです。 http://server.com/UID/ファイル名.txt 。この方法では、ユーザーはファイルを「filename.txt」として保存するのに便利です。また、ファイルの場所が URL でわかります (DB を使用して UID を場所に変換します)。同じファイルの重複を処理するために、UID をチェックサム (MD5、SHA-1) にすることができることに注意してください。

他のヒント

データベース内の guid を使用して投票し、必要に応じて Content-Disposition ヘッダーを使用して名前を元のファイル名に戻します。私が推奨したいのは、使用するフォルダーは Web ルートの外部に保存されるということです。ユーザーがアプリケーション フォルダーにファイルをアップロードすることを望まない場合。

ファイルの名前であるuuidにID(int)をタグ付けするリレーショナルデータベースを使用しました。この方法では、ディスク上でそれらがどのように保存されているかは関係ありません。ファイルを難読化するのに役立ちます。また、JOIN を使用してファイルの名前を任意に変更することもできます。また、別のファイル「名前」を使用できます。それはすべてあなたのアプリとそれがどこで実行されているかに依存します。

アプリケーションなどによって異なりますが、今のところはファイル リポジトリ スキームを非常にシンプルにし、後でより複雑な戦略を決定することをお勧めします。言い換えれば、しばらくの間、一種の「管理された混乱」が生じます。構造と戦略については、すべての要件とドメインの詳細を確認するときに後で取り上げます。シンプルにすることで、すべてを簡単に変更できます。

とにかく、変化は避けられない、今できる最善のことは選択することです 何らかの戦略 そしてすべてを文書化すること。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top