3

私は現在 Zend Framework を使用しており、アップロード ファイル フォームを使用しています。認証されたユーザーは、ファイルをアップロードすることができます。ファイルは、アプリケーションのディレクトリに保存され、データベースに保存された場所に保存されます。そうすれば、ダウンロード可能なファイルとして表示できます。

<a href="/upload-location/filename.pdf">Download</a>

しかし、私が気付いているのは、同じ名前のファイルがアップロード ディレクトリ内のファイルを上書きすることです。エラー メッセージは表示されず、ファイル名もインクリメントされません。したがって、ファイルを上書きする (またはアップロードしない) 必要があると思います。

これらのファイルをアップロード、移動、または保存する際に知っておくべきベスト プラクティスは何ですか? ファイル名が常に一意になるように、常にファイルの名前を変更する必要がありますか?

4

3 に答える 3

9

通常、ユーザーが指定した名前でファイルを保存するのではなく、私たち(つまりアプリケーション)が選択した名前を使用します。

たとえば、ユーザーが をアップロードした場合、次のようmy_file.pdfになります。

  • 以下を含む行をDBに保存します。
    • id; 自動インクリメント、主キー -- " 123"、たとえば
    • ユーザーが付けた名前。そのため、誰かがファイルをダウンロードしようとしたときに正しい名前を送信できます
    • ファイルのコンテンツ タイプ。application/pdfまたはそのようなもの、たとえば。
    • 「私たちの」名前:file-123例えば
  • でファイルへの要求がある場合、id=123どの物理ファイルをフェッチ ( 'file-' . $id) して送信する必要があるかがわかります。
  • そして、「名前を付けて保存」ダイアログボックス用に、DBに保存した名前を使用して、正しい「論理」名に送信するヘッダーを設定できます。
  • コンテンツタイプについても同じです、ところで

このようにして、次のことを確認します。

  • クライアントではなく私たちがファイルを選択するため、ファイルに「間違った」名前が付いていないこと
  • 上書きがないこと: ファイル名にはテーブルの主キーが含まれているため、これらのファイル名は一意です
于 2009-12-10T19:31:53.280 に答える
1

Pascal MARTINの答えを続ける:

id を名前として使用する場合は、ディレクトリの命名戦略を考え出すこともできます。/somedir/part1ofID/part2OfIDファイルシステムから取得するのにそれほど時間はかかりませんが/somedir/theWholeID、ID を分割してパスとファイル名を形成する方法から、同じディレクトリに保存するファイルの数を選択できます。

次の良い点は、実際にファイルをユーザーに出力するために使用するスクリプトで、ユーザーがファイルを表示する権限を持っているかどうかを選択できることです。もちろん、これにはデフォルトで誰もが読めない場所にファイルを保存する必要があります。

この他の質問も参照してください。完全に関連しているわけではありませんが、知っておくとよいでしょう。

于 2009-12-10T19:47:55.477 に答える
0

はい、それらに一意の名前を付ける方法を考え出す必要があります。元のファイル名、dbレコードのpk、アップロードタイムスタンプに基づくハッシュベースから、添付または関連するレコードのdbレコードのさまざまなフィールドに基づくある種のスラッギングまで、さまざまな戦略を見てきました。

于 2009-12-10T19:35:50.840 に答える