it-swarm.com.de

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

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 zwangsläufig Drupal erstellt 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.

7
longboardnode

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

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

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

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

5
Triskelion

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.'));
}
0