特定のフィールドに対して.jsファイルをそのまま(.txtなしで「application/javascript」MIMEタイプを使用)アップロードできるようにしたいときに、この状況に直面しました。また、私は Drupal コアを変更したくありませんでした... もちろん。
そのため、hook_file_presave() を実装するモジュールを作成する必要がありました。フックが on であるため、これは Multiupload File Widget でも機能しfile_save()
ます。
MYMODULE_NAME
andMYFIELD_NAME
を独自の値に置き換える必要があることに注意してください。
function MYMODULE_NAME_file_presave($file) {
// Bypass secure file extension for .js for field_additional_js field only
if((isset($file->source) && strpos($file->source, "MYFIELD_NAME") !== FALSE) && substr($file->filename, strlen($file->filename) - 7) == ".js.txt") {
// Define new uri and save previous
$original_uri = $file->uri;
$new_uri = substr($file->destination, null, -4);
// Alter file object
$file->filemime = 'application/javascript';
$file->filename = substr($file->filename, null, -4);
$file->destination = file_destination($new_uri, FILE_EXISTS_RENAME);
$file->uri = $file->destination;
// Move fil (to remove .txt)
file_unmanaged_move($original_uri, $file->destination);
// Display message that says that
drupal_set_message(t('Security bypassed for .js for this specific field (%f).', array('%f' => $file->filename)));
}
}