3

まず、これに関して多くの質問があり、多くが重複としてマークされていることに気づきました。

私は最終的にこれに来まし

そして、その質問に対して受け入れられた答えは、私の質問を部分的に解決しますが、すべてに答えるわけではありません。

私の質問は、ユーザーが画像をアップロードすることです。パスをデータベースに保存し、画像ファイルをファイルシステムに保存します。ただし、その画像を3部(大、中、小)作成します。つまり、全体として、オリジナル、大、中、小の4つの画像があります。

次のように、4つのパスすべてをデータベースに保存する必要があります

ID  |      original      |    large        |    medium       |    small       |
----+--------------------+-----------------+-----------------+----------------+
 1  |  /path/to/original | /path/to/large/ | /path/to/medium | /path/to/small |

または、オリジナルのパスを保存し、他の3つに次のような命名規則を付け car.jpg, car.jpg, large-car.jpg, medium-car.jpg, small-car.jpgます。

この方法ではデータベースの負荷が軽減され、後で別のサイズ(つまり、非常に小さいサイズ)を追加したい場合は、データベースを変更する必要がないと思います。

4

6 に答える 6

7

特定の行のすべての画像が同じ場所にある場合、それらのベースパスは(元の画像のフルパスから常にベースパスを再導出するのではなく)独自の列である必要があります。

データベース内のすべての画像が同じ場所にある場合は、このテーブルにベースパスをまったく保存しないでください。コードまたはグローバル構成テーブルに入れてください。

于 2009-07-12T01:17:07.257 に答える
2

データベースを使いすぎようとしているようです。代わりにこの方法はどうですか。

ImageID  | UserID  | name.. 
---------+---------+-----
1        | 495     | car454.jpg
2        | 495     | house.jpg
3        | 44      | kittysmall.jpg

そして、すべての画像を1か所に保存します。

IMAGES_PATH = "/ path / to / images"

また、imageID(Auto Increment)で画像に名前を付けると、5番目の画像の場合は5.ori.jpgまたは5.large.jpgなどになります。

このようにして、誰がどの画像を所有しているかを簡単に確認できます。また、ユーザーは同じファイル名で別の画像をアップロードでき、そのことを心配する必要はありません。

于 2009-07-12T05:16:21.107 に答える
1

元の画像のさまざまなサイズに確実な命名規則があることは確かです。これにより、既知のキャッシュキーを生成できるため、memcacheなどのキャッシュに画像を保存できます。これにより、データベースとサーバーのディスクi/の負荷が軽減されます。 oo

于 2009-07-12T05:07:38.080 に答える
1

一般化すると、情報を再作成できる場合は(ベースは常に同じで、その後にユーザー名が続くため)、データベースに保存しないでください。後で何らかの理由で画像を保存するディレクトリを変更したい場合は、問題が発生します。

于 2009-07-12T05:18:11.273 に答える
1

ファイル名を除いて特定のパスに一貫性がある場合は、パスに定数を使用してから、さまざまなサイズの画像を適切なディレクトリに保存し、データベース内のファイル名だけを参照してください。

ここでの主な原則は、データベースとコード内の重複情報を回避することです。データベースの場合はより高い正規形を実現し、コードの場合はDRY(Do n't Repeat Yourself)を実現します。

あなたの構造が次のようなものだと仮定します

/ home / user / site / images / original /

/ home / user / site / images / small /

/ home / user / site / images / medium /

/ home / user / site / images / large /

その情報に定数を使用できます。例えば

PATH_ORIGINAL = / home / user / site / images / original /

PATH_SMALL = / home / user / site / images / small /

PATH_MEDIUM = / home / user / site / images / medium /

PATH_LARGE = / home / user / site / images / large /

次に、コードで次のようなことを行うことができます

smallcar=PATH_TO_SMALL。car.jpg;

または、画像をロードするためのクエリ出力内に適切な定数変数を挿入するだけです。

追加の利点は、データベースレコードの全体を更新するのではなく、ディレクトリ構造を微調整したり、サーバー間でコードを移動したりする必要がある場合に、パスを変更する場所が1つあることです。これにより、問題が発生しやすくなり、エラーが発生しやすくなります。

于 2009-07-12T10:11:23.193 に答える
0

ちょっとした調整として、生成されたサムネイルなどを別のパス(例:../generated/)に配置して、誰かが'carというファイルをアップロードした場合にソース画像を上書きしないようにしたいと思います。 -large.jpg'など。

于 2009-07-12T08:07:55.253 に答える