ファイルフィールドの場合、[許可されたファイル拡張子]にファイル拡張子を入力する必要があります。
anyファイル拡張子を許可する方法はありますか?または、ホワイトリストからブラックリストに切り替える方法は?
Drupal 7の場合、モジュール Allow All File Extensions があります。ADrupal 8ポートは計画されていないようです。
Drupal 7の場合、質問 任意の拡張子のファイルをアップロードできるようにする方法) があり、上記のモジュールが推奨されます。
Drupal 8の場合、問題があります 任意のファイル拡張子を持つファイルのアップロードを許可することはできません ですが、アクティブではないようです。
ノードフォームまたはフィールドレベルにフック変更を実装し、その中でバリデーターをカスタム関数に変更します。
/**
* alter form field element:.
*
* Implements hook_FORM_alter
*/
function my_module_form_alter(&$form, &$form_state, $form_id) {
$upload_validators = array(
'my_module_file_validate_extensions_blacklist' => ['jpg jpeg gif png mp4']
);
$form['your_file_field_element']['#upload_validators'] = $upload_validators;
}
あるいは、ウィジェットのフォームを変更することで、任意のノードまたはエンティティのフィールドの動作を変更できます。
function mymodule_field_widget_form_alter(&$element, &$form_state, $context) {
if ( "condition to check if it's your field" == TRUE) {
$upload_validators = array(
'my_module_file_validate_extensions_blacklist' => ['jpg jpeg gif png mp4']
);
$element['#upload_validators'] = $upload_validators;
}
}
次に、必要なことを行う独自の関数を記述します。
function my_module_file_validate_extensions_blacklist(stdClass $file, $extensions) {
$errors = array();
$regex = '/\\.(' . preg_replace('/ +/', '|', preg_quote($extensions)) . ')$/i';
if (preg_match($regex, $file->filename)) {
$errors[] = t('files with the following extensions are not allowed: %files-allowed.', array(
'%files-allowed' => $extensions,
));
}
return $errors
}