2015-04-01 15 views
11

Ich habe eine sehr einfache Seite, die ein <input type="file"> Element enthält. Wenn ich das Formular mit einer ausgewählten Datei absende, antwortet der Server mit einer Tabelle, die in Excel geöffnet wird (ein "neues Fenster"). Dieses Verhalten hat zur Folge, dass der Anfangsbildschirm und das Eingabeelement im Internet Explorer weiterhin sichtbar sind. Wenn ich die Daten auf der Festplatte der ausgewählten Datei ändere und das Formular erneut übermittel, lädt Internet Explorer die alten Inhalte ein zweites Mal hoch; Meine letzten Änderungen sind nicht in dem Inhalt enthalten, der an den Server gesendet wird. Wenn ich die Datei über die Schaltfläche Durchsuchen ... der Eingabe erneut auswähle, werden die neuen Dateiinhalte wie erwartet hochgeladen. Firefox sendet immer den Inhalt der Datei von der Festplatte, was das erwartete/gewünschte Verhalten ist. Es scheint, dass Internet Explorer eine Art Zwischenspeicherung der hochgeladenen Dateiinhalte vornimmt.Internet Explorer Caching-Datei hochgeladen?

Gibt es eine Möglichkeit, diese "Funktion" zu deaktivieren und IE die Daten jedes Mal aus der Festplatte ziehen, wenn das Formular übermittelt wird?

Gibt es Dokumentation zu diesem Verhalten? Es ist das erste Mal, dass ich darauf gestoßen bin und meine Recherchen sind größtenteils leer ausgegangen.

+0

Was ist, wenn es das * upload * nicht speichert (von dem ich noch nie etwas gehört habe und wirklich komisch wäre), aber das generierte Ergebnis? Sendet das Ergebnis die richtigen Header (oder besser: keine Zwischenspeichern)? –

+0

@Pekka: In den Serverprotokollen wird angezeigt, dass der Browser eine POST-Anfrage sendet und für jeden Upload-Versuch 200 OK zurückgibt. Wenn die Antwort zwischengespeichert würde, würde ich erwarten, dass Internet Explorer entweder die Anfrage vollständig überspringt oder der Server den Status 304 nicht geändert zurückgibt. – Todd

+0

Welche Technologie wird auf Server-Seite verwendet, um den Upload zu verarbeiten und die Datei zu verarbeiten? Sie könnten die Prüfsummen der hochgeladenen Dateien protokollieren, um zu sehen, ob der Browser tatsächlich die falsche Datei sendet oder ob auf der Serverseite noch etwas schief geht. –

Antwort

4

Sie können die Vermutung mit live demos posted on MS-Connect testen.

[...] der Fehler begann mit IE10, als FileList und Blob implementiert wurden.
input.files ist eine html5 FileList von Datei-/Blob-Elementen.
Um es zu füllen, blobiert IE jede Dateiauswahl. Sie haben einen "Snapshot State" (W3C Begriff).
Sie werden synchronisiert, wenn eine ausgewählte Datei vor der Übertragung aktualisiert wird.
Der Fehler besteht darin, dass IE nicht erkennt, ob die Datei gelöscht, umbenannt oder ersetzt wurde.
Der Dateipicker-Snapshot wird in diesem Fall deaktiviert.

Hier ist, was passiert, wenn eine Datei in Filepicker ausgewählt wird, dann umbenannt und bearbeitet, bevor die Filepicker Auswahl einreichen. Obwohl eine neue Datei (mit dem ursprünglichen Dateinamen) an ihrer Stelle ersetzt wurde, wird die ursprüngliche Datei (jetzt mit verschiedenenName und geänderten Text) in das Formular gesendet. Wie ist das möglich? Es ist, als ob es über ntfs ObjectID verfolgt wurde, das mit Distributed Link Tracking verwendet wird. Beachten Sie sorgfältig in diesem Screenshot, die Datei Name stimmt nicht mit der Datei Inhalt überein.

Also, es ist nicht ein "Caching" Ding überhaupt. Es ist ein Tracking-Fehler.

0

Ich habe das selbst nicht versucht, aber Sie können versuchen, einen Dummy-Parameter für die Formularaktion zu verwenden und den Wert unmittelbar vor jeder Übermittlungsaktion zu ändern. Wenn Sie beispielsweise <form action="foo.php"> haben, ändern Sie dies in <form action="foo.php?dummy=0">, und verwenden Sie dann Javascript, um den Aktionsteil so zu ändern, dass er z. action="foo.php?dummy=1" und so weiter kurz vor jedem einreichen.

1

Haben Sie versucht, das autocomplete Attribut für Ihr input Tag zu verwenden?

Zum Beispiel

<input type="text" autocomplete="off" /> 

Wert zwingen sollte werden nie wiederverwendet werden, wie in W3C docs angegeben:

der automatischen Vervollständigung auf/off/default

  • auf - Der Ein-Zustand zeigt an, dass das val Es ist nicht besonders empfindlich und der Benutzer kann erwarten, dass er sich darauf verlassen kann, dass sein Agent sich die Werte merkt, die er für dieses Steuerelement eingegeben hat.
  • aus - Der ausgeschaltete Zustand zeigt an, dass die Eingabedaten des Steuerelements besonders empfindlich sind (z. B. der Aktivierungscode für eine Atomwaffe ); oder dass es ein Wert ist, der nie wieder verwendet wird (zum Beispiel eine einmalige Taste für eine Bank-Login) und der Benutzer muss daher die Daten jedes Mal explizit eingeben, anstatt auf die UA, um den Wert für ihn vorzufüllen; oder dass das Dokument seinen eigenen Autocomplete-Mechanismus bereitstellt und nicht möchte, dass der Benutzeragent Autokomplettierungswerte bereitstellt.
0

Ich hatte dasselbe Problem in IE 10,11. Ich bin in der Lage, es zu beheben unter Code

var file = $('input[type="file"]'); 
file.removeAttr('value'); 
var cloneFile = file.clone(); 
file.parent().get(0).replaceChild(cloneFile.get(0), file.get(0)); 

Wenn Sie mehr Objekt für Datei werden immer dann Äq (-2) nach Selektor wie

$('input[type="file"]').eq(-2); 

mir jede Frage im Fall Kommentar.