FILE_EXISTS_REPLACEがあるにもかかわらず、ファイル保存アップロードで既存のファイルが置き換えられない


7

ユーザーが新しいバージョンをアップロードした場合、同じ名前の既存のファイルを強制的に置き換えようとしています。私はこのトピックに関する多くの投稿を見てきましたが、強制的に置換する方法を見つけることができたものはありません。

私はカスタムフォームを使用しており、フォームの検証中に機能させようとしてきたコードは次のとおりです。

  $file = file_save_upload(
      'file', 
      array(
        'file_validate_is_document' => array(), // Validates file is really a document.
        'file_validate_extensions' => array('pdf doc ppt pps avi mpg mov wmv'), // Validate extensions.
      ),
      'public://',
      FILE_EXISTS_REPLACE
  );

改訂されたファイル(「file.jpg」としましょう)がアップロードされますが、Drupalは必然的に新しいコピーを作成し、新しいバージョンごとにfile_0.jpg、file_1.jpgなどの名前に変更します。

アップロードをコミットする前に "file_delete"を使用してプログラムで元のファイルを削除しようとしましたが、まだコピーを取得しています!

任意の助けいただければ幸いです。

回答:


5

これはdrupalのデフォルトの動作であり、既知の問題です。いくつかの方法で対処されています。

ファイルのアップロードは交換してください新しいファイルは元の名前を保持しますので、ファイル名を交換することにより、モジュールのアドレスにこの問題を。

メディア更新モジュールは、メディアファイル(の一部の現場交換で可能にするメディアプロジェクト)。

これらのモジュールのいずれかを使用するか、独自の関数のモデルとして使用できます。


完璧です。すべてのオプションについて@triskelionに感謝します。アップロードファイルの置き換えを使用してしまいました。
longboardnode 2013年

0

私は次のコードを使用してそれを動作させることができました。

$file = file_save_upload('file', $validators);
// If the file passed validation:
if ($file) {
    // I PLACED IT IN THE NEXT LINE
    if ($file = file_move($file, 'public://', FILE_EXISTS_REPLACE)) {
        // Save the file for use in the submit handler.
        $form_state['storage']['file'] = $file;
    } else {
        form_set_error('file', t('Failed to write the uploaded file to the site\'s file folder.'));
    }
} else {
    form_set_error('file', t('No file was uploaded.'));
}

-1
$file_temp = file_save_data($attachment->data, 'public://<my_files_locatioin>/<my-filename.pdf>' , FILE_EXISTS_REPLACE);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.