web-dev-qa-db-ja.com

ユーザーが同じファイル(画像)を複数回アップロードしないようにするにはどうすればよいですか?

Drupal 7の組み込みの画像フィールドを使用してユーザーが画像を追加できるコンテンツタイプの画像があります。ユーザーがまったく同じ画像(同じファイル名、同じサイズ)可能であれば。ファイルの重複アップロードを防ぐ方法はありますか?

7
Patrick Kenny

これにモジュール File Hash モジュールがあります。彼のアプローチの概要を説明してくれたJimajammaに感謝します。これにより、Google経由でこのモジュールを見つけることができました。

this thread に示すように、モジュールは現在、重複したファイルのアップロードをグローバルに無効にするために使用できます。

3
Patrick Kenny

擬似/迅速なコードでは、これは私がそれに取り組む方法です。カスタムモジュールで...

  1. 2つの列、fidとmd5を持つテーブルをデータベースに作成します。

  2. ファイルを作成するたびに、一意であると考えるもののmd5()がそのdbにあるかどうかを確認します。たとえば、

    a。 TABLEからfidを選択します。md5= ab3783ea6c83bcd9383eef778

    b。 fidがoopsの場合、ファイルblah blah blahがすでにあるように見えます

    c。さもないと

  3. そのファイルのfidとmd5()をそのテーブルに保存します。

画像コンテンツを作成するときに、このロジックをすべて検証フックに配置できます。それをオーバーライドできるロールなどを設定することもできます。

さて、物事のmd5()化に。

  1. ファイル名は簡単に変更され、実際にはdrupalに送信されるとは思わない-代わりに、事後に作成されます-本当に使用しますか?

  2. ファイルの内容は、より良いアプローチかもしれません。

したがって、md5にはクイックmd5_file(PATHTOFILE)を設定できます。

ここで、システム全体またはユーザーごとにこのシステムを実行するオプションが必要だとします。たとえば、1人のユーザーが1つの画像の複数のコピーをアップロードしたくない場合や、システム全体で1つの画像のみをアップロードしたい場合などです。

上記の表に別の列uidを追加し、同様に確認してください。例:

tABLEからfidを選択します。md5= ...およびuid = $ user-> uid

とにかく、これらはここD6landでの朝の最初のエスプレッソの後の私の簡単な考えです。たぶん、D7にはすでにいくつかの機能が組み込まれていて、そのホイールを再発明しています:)

5
Jimajamma

これを実現するには、カスタムモジュールを作成する必要があると思います。私は以前、これを少しずつ行ってきました。フォームを使用して、フィールドを確認してください。ファイルの名前とサイズを取得するために、いくつかの変数がこれら2つを取得していることを確認してください。

  1. Db_queryを使用してデータベースからこれらの値を取得できるかどうか試してください。
  2. そうでない場合は、「static $ variable_name = $ field ['name'];を使用して動的に保存し、サイズについても同様です。

次に、if()を使用して、if(!isset($ field ['name'])&&!isset($ field ['size']))を確認します。これに基づいて、フォームにエラーメッセージを設定します。

お役に立てば幸いです。

1
user4081