Der Upload zum Speichern von Dateien ersetzt die vorhandene Datei trotz FILE_EXISTS_REPLACE nicht


7

Ich versuche, das Ersetzen einer vorhandenen Datei mit demselben Namen zu erzwingen, wenn eine neue Version vom Benutzer hochgeladen wird. Ich habe viele Beiträge zu diesem Thema gesehen, aber keine, bei denen ich Adressen finden konnte, wie der Austausch erzwungen werden kann.

Ich verwende ein benutzerdefiniertes Formular. Hier ist der Code, den ich während der Formularüberprüfung zum Laufen gebracht habe:

  $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
  );

Die überarbeitete Datei (sagen wir "file.jpg") wird hochgeladen, aber Drupal erstellt zwangsläufig eine neue Kopie und benennt sie für jede neue Version in file_0.jpg, file_1.jpg usw. um.

Ich habe sogar versucht, die Originaldatei vor dem Hochladen programmgesteuert mit "file_delete" zu löschen, aber ich bekomme immer noch die Kopie!

Jede Hilfe wäre dankbar.

Antworten:


5

Dies ist das Standardverhalten von Drupal und ein bekanntes Problem. Es wurde auf verschiedene Arten angesprochen.

Das Modul " Datei ersetzen" behebt dieses Problem, indem die Dateinamen ausgetauscht werden, damit die neue Datei den ursprünglichen Namen behält.

Das Media Update- Modul ermöglicht das In-situ-Ersetzen von Mediendateien (Teil des Media- Projekts).

Sie können entweder eines dieser Module verwenden oder sie als Modell für Ihre eigene Funktion verwenden.


Perfekt, danke @triskelion für alle Optionen. Am Ende habe ich Upload File Replace verwendet.
Longboardnode

0

Ich habe es geschafft, es mit dem folgenden Code zum Laufen zu bringen.

$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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.