2013-02-09 20 views
6

Ich habe Schwierigkeiten, das Jquery-Dateiupload-Plugin zu aktualisieren. Wenn Sie also eine Datei hochladen, überschreibt sie einfach eine vorhandene Datei mit demselben Namen, anstatt sie mit einem Upcount umzubenennen.jquery Dateiupload - Wie überschreiben Datei NICHT umbenennen

I angewandt haben die Änderung in diesem Link bedeckt: https://github.com/blueimp/jQuery-File-Upload/issues/1965

aber ich kann dieses Plugin nicht scheinen, überschreiben diese Funktion zu erhalten?

gibt es eine bestehende offene Frage noch nicht beantwortet: jQuery File Upload by bluimp, how to replace instead of renaming

jede Führung auf diesem würde sehr geschätzt werden.

+0

Haben Sie vielleicht eine Lösung für das Überschreiben einer Datei finden? Ich brauche es auch. Danke –

+0

Schau mal hier: https://stackoverflow.com/a/47333596/2065594 –

Antwort

-2

Führen Sie einfach eine Ajax-Anforderung innerhalb des Callbacks aus, um den Upload zu starten, und löschen Sie die Datei von der Datenfestplatte. Sie finden den Dateinamen mit data.files [0] .name.

Dann suchen Sie nur für die tr mit der alten Verbindung, wie folgt aus:

$("a[title='"+ data.files[0].name + "']").each(function() { 
     $(this).closest('tr').fadeOut(); 
    }); 

und es auszublenden.

Grüße

+0

es tut mir leid, aber ich kann nicht herausfinden, wie eine DOM-Operation in einer Tabellenzeile _anything_ mit der vorliegenden Frage zu tun hat oder sogar Ihren Vorschlag, die Datei vor dem Upload zu löschen ... – Peter

2

Ich brauchte die gleiche Datei überschreiben Option.

Mit der PHP UploadHandler.php Datei habe ich einen wirklich schnellen Hack gemacht, der für mich funktioniert. Ich bin mir sicher, dass es einen besseren Weg gibt, aber das kann anderen helfen.

Suchen Sie nach Handler 'upcount_name_callback' und ersetzen Sie die return-Anweisung durch die Nummerierung (Index). Ich verließ die ursprüngliche return-Anweisung, falls ich wieder gehen müssen :)

protected function upcount_name_callback($matches) { 
    $index = isset($matches[1]) ? intval($matches[1]) + 1 : 1; 
    $ext = isset($matches[2]) ? $matches[2] : ''; 
    return ''.$ext; 
    /* return ' ('.$index.')'.$ext; */ 
} 
8

Wenn Sie UploadHandler.php verwenden, die im Wiki ist es existiert einfach. Im get_file_name Methode sollten Sie diese Zeile:

return $this -> get_unique_filename($this -> trim_file_name($name, $type, $index, $content_range), $type, $index, $content_range); 

mit diesem:

return $this -> trim_file_name($name, $type, $index, $content_range); 
+1

Lol, Mann, Ihre Lösung hat mir geholfen, aber in meinem Fall funktionierte das nicht. Ich werde dann meine eigene Antwort schreiben. –

0

Betrachten Sie die Dokumentation auf Github (here) und scrollen Sie nach unten, wo es heißt "Wie man eine Datei binden ein Elementknoten während des Lebenszyklus eines Uploads ". Dies ist der Code:

$(function() { 
    $('#fileupload').fileupload({ 
     dataType: 'json', 
     add: function (e, data) { 
      data.context = $('<p/>').text('Uploading...').appendTo(document.body); 
      data.submit(); 
     }, 
     done: function (e, data) { 
      data.context.text('Upload finished.'); 
     } 
    }); 
}); 

Achten Sie auf die Funktion getan Rückruf. Wenn Sie das Daten Objekt erweitern, werden Sie feststellen, dass es ein data.files Objekt sowie ein data.result Objekt gibt. data.result enthält den Namen der Datei auf dem Server. Daher lautet der Name der neu hochgeladenen Datei auf dem Server data.result.files [0] .name basierend auf dem oben angegebenen Beispielskript.

Ich hoffe, das jemand

0

hilft habe ich versucht Lösung von @MKoosej.In meinem Fall funktionierte es gut, aber ich habe auch trim_file_name bearbeitet, wo ich es mache, um nur einen Dateinamen zurückzugeben (ich musste einen Uploader machen, der jeden Dateinamen in data.csv umwandelt). Außerdem musste ich eine andere Version des Uploaders machen, wo ich den Dateinamen neu schreiben sollte, aber nicht umbenennen sollte, aber die verschiedenen Dateien mit unterschiedlichen Namen sollten anders bleiben. Also, als ich dort @MKoosej Lösung versuchte es begann Datei mit nur Erweiterung wie .jpeg ohne Dateiname hochladen. So fand ich diese Lösung: in func get_unique_filename im Anfang an habe ich dies gesagt:

$oldName=$name; 

und kehrte $oldName statt $name und es war in Ordnung.

1

2016 UPDATE zu MKoosej ist fix! In UploadHandler.php → geschützten Funktion get_file_name ...

ersetzen
return $this->get_unique_filename(
     $file_path, 
     $this->fix_file_extension($file_path, $name, $size, $type, $error, 
      $index, $content_range), 
     $size, 
     $type, 
     $error, 
     $index, 
     $content_range 
    ); 

mit

return $this -> trim_file_name($file_path, $name, $size, $type, $error, $index, $content_range);