2012-04-23 10 views
2

私はユーザーがファイルをアップロードできるウェブサイトを実装しています。アップロードされたファイルを今後どのように簡単に管理できるように、アップロードフォルダをどのように構成するべきなのだろうか。別のユーザーに異なるサブフォルダ(例えば、user1のアップロード/ user1、user2のupload/user2など)を提供するか、それらをすべて同じフォルダに入れる必要がありますか?アップロードしたファイルの名前を変更する必要がありますか? (私は多くのウェブサイトがこれをやっていることを知っています!)アップロードされたファイルのフォルダの構造

答えて

1

BLOBを使用せず、ユーザーが任意の数のイメージを持っている場合は、サブフォルダを使用する必要があります。たとえば、ユーザーのIDの後に名前の付いたサブフォルダを作成できます。この理由の1つは、フォルダに多数のファイルが含まれている場合、指定された名前のファイルを見つけるのに時間がかかるため、アクセス時間が長くなることです。ファイルが保存されているときにファイルの名前を変更して、名前が重複しないようにすることもできます。新しく生成された名前をDBに保存することを忘れないでください。

+0

私は解決策を見つけました。次のようにアップロードフォルダーを構成するように指示しています。メインフォルダーは 'upload'と呼ばれ、3つのレベル(例:' upload/0/0/file.jpg')から成ります。 'upload/0/0'フォルダに1024個のファイルがある場合、自動的に' upload/0/1'フォルダが作成されます。 'upload/0'フォルダは1024個のサブフォルダ(' upload/0/0'から 'upload/0/1023'まで)を持つことができます。同様に、フォルダ 'upload'も1024個のサブフォルダを持つことができます。したがって、最大で2^30個のファイルを格納できます。毎日、ユーザーが合計1024ファイルをアップロードすると、スペースを使い切るのに2873年かかります。それが実現可能だと思いますか? –

+0

私はこのようなことをする方がいいかもしれないと思います:ユーザーのIDで第1レベルのサブディレクトリに名前を付けます。次のステップは、ユーザーがアップロードした各イメージに一意のIDを割り当てる場合にのみ有効です。次に、第2レベルのサブディレクトリの名前をstrval($ imgId%DIVISOR_CHOSEN_BY_YOU)とすることができます。場合によっては、これは各サブディレクトリ内の画像の数を減らすかもしれない、と私は思う。しかし、私はこれについて専門家から遠く離れていることに注意してください... – Exander

0

これらの名前を変更すると、たとえばログインしていない人に「隠す」ことができれば便利です。元の名前をDBに保存するだけです。

また、BLOB型のSQLテーブルにすべてを格納することができます。数GBでもかまいません。ファイル名、ユーザー名などを関連付けることができます。

+0

DBAを不必要に大きくする可能性があるため、同僚はBLOBタイプを使用しないでくださいと言ったことがあります。とにかく、私はまだアップロードされたファイルの場所について混乱していますが、ファイルの名前変更の目的についてあなたの答えをお寄せいただきありがとうございます –

+0

それはDBを拡大しますが、ファイルを使用するとディレクトリを拡大するので、あなたのポイントは何ですか?それは全く減速しません。 – DanRedux

関連する問題