Drupal 7の組み込みの画像フィールドを使用してユーザーが画像を追加できるコンテンツタイプの画像があります。ユーザーがまったく同じ画像(同じファイル名、同じサイズ)可能であれば。ファイルの重複アップロードを防ぐ方法はありますか?
これにモジュール File Hash モジュールがあります。彼のアプローチの概要を説明してくれたJimajammaに感謝します。これにより、Google経由でこのモジュールを見つけることができました。
this thread に示すように、モジュールは現在、重複したファイルのアップロードをグローバルに無効にするために使用できます。
擬似/迅速なコードでは、これは私がそれに取り組む方法です。カスタムモジュールで...
2つの列、fidとmd5を持つテーブルをデータベースに作成します。
ファイルを作成するたびに、一意であると考えるもののmd5()がそのdbにあるかどうかを確認します。たとえば、
a。 TABLEからfidを選択します。md5= ab3783ea6c83bcd9383eef778
b。 fidがoopsの場合、ファイルblah blah blahがすでにあるように見えます
c。さもないと
そのファイルのfidとmd5()をそのテーブルに保存します。
画像コンテンツを作成するときに、このロジックをすべて検証フックに配置できます。それをオーバーライドできるロールなどを設定することもできます。
さて、物事のmd5()化に。
ファイル名は簡単に変更され、実際にはdrupalに送信されるとは思わない-代わりに、事後に作成されます-本当に使用しますか?
ファイルの内容は、より良いアプローチかもしれません。
したがって、md5にはクイックmd5_file(PATHTOFILE)を設定できます。
ここで、システム全体またはユーザーごとにこのシステムを実行するオプションが必要だとします。たとえば、1人のユーザーが1つの画像の複数のコピーをアップロードしたくない場合や、システム全体で1つの画像のみをアップロードしたい場合などです。
上記の表に別の列uidを追加し、同様に確認してください。例:
tABLEからfidを選択します。md5= ...およびuid = $ user-> uid
とにかく、これらはここD6landでの朝の最初のエスプレッソの後の私の簡単な考えです。たぶん、D7にはすでにいくつかの機能が組み込まれていて、そのホイールを再発明しています:)
これを実現するには、カスタムモジュールを作成する必要があると思います。私は以前、これを少しずつ行ってきました。フォームを使用して、フィールドを確認してください。ファイルの名前とサイズを取得するために、いくつかの変数がこれら2つを取得していることを確認してください。
次に、if()を使用して、if(!isset($ field ['name'])&&!isset($ field ['size']))を確認します。これに基づいて、フォームにエラーメッセージを設定します。
お役に立てば幸いです。