2

ユーザーのユーザー名やアルバムが異なる場合に、ユーザーの画像を保存するためのWebアプリケーションに最適なフォルダー構造は何でしょうか。Amazon S3、フォルダー、バケットを使用しています

FBのようなユーザー/アルバムのURLを人々が予測できるようにしたくない

http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1189.snc/154140_10150322456245277_731310276_15908482_4918209_n.jpg

ファイル名についても。ファイル名を変更するためにエンコードするのに最適な種類の情報は何ですか。(ユーザー名、日付/時刻、ユーザーID)例:

オリジナル:apple.jpg

エンコード:1263547483_56783929_3934736_943883.jpg

これらのURLセーフファイル名をエンコードするために何を使用しますか?Base64、MessageDigests?

4

2 に答える 2

1

「ランダムな」ファイル名を作成します。ファイルは、1つのディレクトリに保存することも、dir01、dir02、dir03などの生成されたディレクトリ構造に保存することもできます。非常に大量のファイルには、個別のディレクトリの方が適しています。1つのディレクトリに10Kを超えるファイルを保存するべきではないと思います。より多くのファイルがある場合は、カウンターが10Kに到達するたびに新しいディレクトリを作成します。

ファイルシステムの物理パスを含むファイルのすべてのメタデータは、DBに保存する必要があります。ファイルテーブルにはユーザーテーブルへの外部キーが含まれている可能性があるため、ファイルの所有者をいつでも知ることができます。

この設計はスケーラブルです。将来的には、異なるディレクトリを別々のディスクに保存したり、CDNシステムを使用したりすることもできます。これは十分に安全です。何もエンコードしないため、ファイルメタデータをファイル名にどのようにエンコードするかを推測することはできません。ランダムな名前を作成するだけです。シンプルでパワフルです。すべてのデータはDBにあるため、将来的に新しい機能を追加して、DBの古いデータに対して実行できます。

于 2010-12-05T14:58:07.030 に答える
1

exBase64でエンコードするのは悪い考えのようです。ファイル名をGUIDに置き換えるだけで、ファイルとGUIDを一緒にマップするマップがデータベースに作成されます。

何かのようなもの:

http://photos.site.com/{account-id}/{gallery-id}/{image-guid}.jpg

その結果、次のようになります。

http://photos.site.com/23323/323/F66A80B2_007F_11E0_86C8_322ADFD72085.jpg
于 2010-12-05T14:58:26.863 に答える