web-dev-qa-db-de.com

Dateieingabe merken und erneut füllen

Hinweis:

Die Antwort (en) unten geben den Stand der älteren Browser von 2009 wieder. Jetzt können Sie den Wert des Dateieingabeelements über JavaScript in 2017 festlegen.

Siehe die Antwort in dieser Frage für Details sowie eine Demo:
Wie programmiere ich den Dateieingabewert (d. H .: beim Drag-Drop von Dateien)?

Ich habe eine Website, auf der der Benutzer eine Datei mehrmals zur Verarbeitung hochladen kann. Im Moment habe ich eine einzige Dateieingabe, möchte mich aber an die Auswahl des Benutzers erinnern und diese auf dem Bildschirm anzeigen lassen.

Ich möchte wissen, wie ich vorgehen soll, nachdem ein Benutzer eine Datei ausgewählt hat. Ich werde mich an ihre Auswahl erinnern und die Dateieingabe mit der beim erneuten Laden der Seite ausgewählten Datei erneut anzeigen. Ich muss nur wissen, wie ich mich an eine Dateieingabe erinnern und sie wieder auffüllen kann. 

Ich bin auch offen für Ansätze, die keine Dateieingabe verwenden (sofern dies möglich ist).

Ich verwende JQuery

41
user1150103

Ok, Sie möchten "Merken und Dateieingabe neu auffüllen ", "Merken und Die Dateieingabe erneut anzeigen Mit der Datei, die beim Neuladen der Seite vorgewählt wurde " ..
Und in dem Kommentar zu meiner vorherigen Antwort geben Sie an, dass Sie nicht wirklich offen für Alternativen sind: "Entschuldigen Sie, aber keine Flash- und Applets, nur Javscript- und/oder Dateieingaben, möglicherweise per Drag & Drop."

Ich habe beim Durchsuchen (einiger) doppelter Fragen festgestellt ( 1 , 2 , usw.), dass praktisch alle anderen Antworten lauten: "Nein, können Sie nicht, das wäre ein Sicherheitsproblem", optional gefolgt von einem einfachen Konzept- oder Codebeispiel, das das Sicherheitsrisiko umreißt.

Jemand, der hartnäckig wie ein Maultier ist (bis zu einem gewissen Grad nicht unbedingt eine schlechte Sache), könnte diese Antworten jedoch als "Nein, weil ich das gesagt habe" empfinden, was in der Tat etwas anderes ist als: "Nein, und hier sind die Spezifikationen, die verbieten ".
Das ist also mein dritter und letzter Versuch, deine Frage zu beantworten (ich habe dich zum Wasserloch geführt, ich führe dich zum Fluss, jetzt schiebe ich dich zur Quelle, aber ich kann nicht dich zum trinken bringen).

Edit 3:

Was Sie tun möchten, wurde tatsächlich einmal in RFC1867 Abschnitt 3.4 beschrieben/'vorgeschlagen':

Das VALUE-Attribut kann mit <INPUT TYPE=file>-Tags für einen Standarddateinamen verwendet werden. Diese Verwendung ist wahrscheinlich plattformabhängig. Es kann jedoch in Sequenzen von mehr als einer Transaktion nützlich sein, um beispielsweise zu vermeiden, dass der Benutzer immer wieder zur Eingabe desselben Dateinamens aufgefordert wird.

Und in der Tat gibt derHTML 4.01 spec Abschnitt 17.4.1Folgendes an:

Benutzerprogramme können den Wert des value-Attributs als anfänglichen Dateinamen verwenden.

(Mit "Benutzeragenten" meinen sie "Browser").

Angesichts der Tatsache, dass Javascript ein Formular (einschließlich einer Dateieingabe) ändern und übermitteln kann und man CSS verwenden könnte, um Formulare/Formularelemente (wie die Dateieingabe) auszublenden, würden die obigen Anweisungen allein das stille Hochladen ermöglichen Dateien vom Computer eines Benutzers ohne dessen Absicht/Wissen.
Es ist eindeutig äußerst wichtig, dass dies nicht möglich ist, und als solches heißt es in (oben) RFC1867 in Abschnitt 8 Sicherheitsüberlegungen :

Es ist wichtig, dass ein Benutzeragent keine Datei sendet, die der Benutzer nicht ausdrücklich angefordert hat. Daher wird von HTML-Interpreting-Agents erwartet, dass sie alle Standarddateinamen bestätigen, die möglicherweise mit <INPUT TYPE=file VALUE="yyyy"> vorgeschlagen werden.

Der einzige Browser (dessen ich mir bewusst bin), der diese Funktionen jemals implementiert hat, war (einige ältere Versionen von) Opera : Er akzeptierte einen <input type="file" value="C:\foo\bar.txt> oder einen Wert, der von Javascript (Elm_input_file.value='c:\\foo\\bar.txt';) festgelegt wurde.
Wenn diese Datei beim Absenden des Formulars unverändert blieb, öffnete Opera ein Sicherheitsfenster, in dem der Benutzer darüber informiert wurde, welche Datei (en) wohin hochgeladen werden sollen ( URL/Webserver).

Nun könnte man argumentieren, dass alle anderen Browser gegen die Spezifikation verstoßen haben, aber das wäre falsch: da die Spezifikation angab: "may" (es hat nicht gesagt "must ")" .. value-Attribut als anfänglichen Dateinamen verwenden ".
Und wenn der Browser das Festlegen des Dateieingabewerts (auch bekannt als "schreibgeschützt") nicht akzeptiert, muss der Browser auch kein so "beängstigendes" Fenster öffnen. und "schwieriges" Sicherheits-Popup (das möglicherweise nicht einmal seinem Zweck dient, wenn der Benutzer es nicht versteht (und/oder "bedingt" war, immer auf "OK" zu klicken)).

Dann lassen Sie uns schnell zu HTML 5 vorspulen.
Hier ist all diese Unklarheit geklärt (und doch sind noch einige Rätsel zu lösen):

Unter4.10.7.1.18 Datei-Upload-Statuskönnen wir in den Buchhaltungsdetails nachlesen :

  • Das Wert-IDL-Attribut befindet sich im Modus Dateiname.
    ...
  • Das value-Attribut des Elements muss weggelassen werden.

Das value-Attribut einer Dateieingabe muss also weggelassen werden, funktioniert aber auch in einem Modus namens "Dateiname", der in4.10.7.4 Gemeinsame Eingabeelement-APIsbeschrieben wird:

Mit dem Attribut value IDL können Skripts den Wert eines Eingabeelements bearbeiten. Das Attribut befindet sich in einem der folgenden Modi, die sein Verhalten definieren:

überspringen zu ' mode filename ':

Beim Abrufen muss die Zeichenfolge "C:\fakepath \" gefolgt vom Dateinamen der ersten Datei in der Liste der ausgewählten Dateien (falls vorhanden) oder der leeren Zeichenfolge (falls die Liste leer ist) zurückgegeben werden. Wenn der neue Wert beim Festlegen eine leere Zeichenfolge ist, muss die Liste der ausgewählten Dateien geleert werden. Andernfalls muss eine InvalidStateError-Ausnahme ausgelöst werden.

Lassen Sie mich das wiederholen: "it must throw an InvalidStateError exception", wenn man versucht, einen Dateieingabewert auf einen String zu setzen, der nicht leer ist !!! (Aber man kann das Eingabefeld löschen, indem man seinen Wert auf eine leere Zeichenkette setzt.)

Derzeit und in der absehbaren HTML5-Zukunft (und in der Vergangenheit, außer Opera) kann nur der Benutzer eine Dateieingabe einfügen (über den Browser oder den vom Betriebssystem bereitgestellten 'Dateiauswahl'). Die Dateieingabe kann nicht mit Javascript oder durch Setzen des Standardwertes in eine Datei/ein Verzeichnis (neu) gefüllt werden.

Den Dateinamen/Dateipfad ermitteln

Nun, nimm an es war nicht unmöglich, eine Datei-Eingabe mit einem Standardwert (neu) zu füllen, dann brauchst du natürlich den vollständigen Pfad: Verzeichnis + Dateiname (+ Erweiterung).

In der Vergangenheit haben einige Browser wie (die bekanntesten) IE6 (bis IE8)den vollständigen Pfad + Dateinamen als Wert angezeigt: nur eine einfache alert( Elm_input_file.value ); usw. in Javascript UND der Browser hat diesen auch vollständig gesendet Pfad + Dateiname (+ Erweiterung) zum empfangenden Server beim Absenden des Formulars.
Hinweis: Einige Browser haben auch ein Attribut "Datei oder Dateiname" (normalerweise an den Server gesendet), aber dies würde natürlich keinen Pfad enthalten.

Dies ist ein realistisches Sicherheits-/Datenschutzrisiko: Eine böswillige Website (Eigentümer/Ausbeuter) kann den Pfad zu einem Benutzerverzeichnis erhalten (in dem sich persönliche Inhalte, Konten, Cookies, Benutzeranteile der Registrierung, Verlauf, Favoriten, Desktop usw. befinden) befindet sich an bekannten konstanten Orten), wenn der typische Windows-Benutzer seine Dateien von C:\Documents and Settings\[UserName]\My Documents\My Pictures\kinky_stuff\image.ext hochlädt.
Ich habe beim Übertragen der Daten (auch "verschlüsselt" über https) oder beim "sicheren" Speichern dieser Daten nicht einmal über die Risiken gesprochen!

Aus diesem Grund begannen immer mehr alternative Browser, eine der ältesten bewährten Sicherheitsmaßnahmen zu befolgen: Informationen müssen auf der Basis von Informationen ausgetauscht werden, die bekannt sein müssen.
Und die große Mehrheit der Websites muss nicht wissen den Dateipfad, so dass sie nur den Dateinamen (+ Endung) enthüllten.

Als IE8 veröffentlicht wurde, entschied sich MS, dem Wettbewerb zu folgen und fügte eine URLAction-Option mit dem Namen "Lokalen Verzeichnispfad beim Hochladen von Dateien einschließen" hinzu, die für die allgemeine Internetzone auf "deaktiviert" (und in der Internet-Zone auf "aktiviert") gesetzt war vertrauenswürdige Zone).

Diese Änderung verursachte eine kleine Verwüstung (hauptsächlich in für den Internet Explorer optimierten Umgebungen), in denen alle Arten von benutzerdefiniertem Code und proprietären Steuerelementen nicht den Dateinamen der hochgeladenen Dateien abrufen konnten: Sie waren hartcodiert, um eine Zeichenfolge mit zu erwarten einen vollständigen Pfad und extrahieren Sie den Teil nach dem letzten Backslash (oder Schrägstrich, wenn Sie Glück hatten ...). 1 , 2

Dann kam HTML5,
und wie Sie oben gelesen haben, gibt der 'mode filename' an:

Beim Abrufen muss die Zeichenfolge "C:\fakepath \" gefolgt vom Dateinamen der ersten Datei in der Liste der ausgewählten Dateien (falls vorhanden) oder der leeren Zeichenfolge (falls die Liste leer ist) zurückgegeben werden.

und sie merken das

Diese "Fakepath" -Anforderung ist ein trauriger Unfall der Geschichte

und

Aus historischen Gründen wird dem Dateinamen durch das Attribut value IDL die Zeichenfolge "C:\fakepath \" vorangestellt. Einige ältere Benutzeragenten enthielten tatsächlich den vollständigen Pfad (was eine Sicherheitslücke war). Infolgedessen ist es nicht einfach, den Dateinamen auf eine abwärtskompatible Weise aus dem Wert-IDL-Attribut abzurufen. Die folgende Funktion extrahiert den Dateinamen in einer angemessen kompatiblen Weise:

function extractFilename(path) {
  if (path.substr(0, 12) == "C:\\fakepath\\")
    return path.substr(12); // modern browser
  var x;
  x = path.lastIndexOf('/');
  if (x >= 0) // Unix-based path
    return path.substr(x+1);
  x = path.lastIndexOf('\\');
  if (x >= 0) // Windows-based path
    return path.substr(x+1);
  return path; // just the filename
}

Hinweis: Ich finde diese Funktion dumm: Es geht darum, immer einen falschen Windows-Pfad zu parsen. Das erste "Wenn" ist also nicht nur nutzlos, sondern führt sogar zu einem Fehler: Stellen Sie sich einen Benutzer mit einem älteren Browser vor, der hochlädt eine Datei von: c:\fakepath\Some folder\file.ext (wie es zurückgeben würde: Some folder\file.ext) ...
Ich würde einfach verwenden:

function extractFilename(s){ 
  // returns string containing everything from the end of the string 
  //   that is not a back/forward slash or an empty string on error
  //   so one can check if return_value===''
  return (typeof s==='string' && (s=s.match(/[^\\\/]+$/)) && s[0]) || '';
} 

(wie die HTML5-Spezifikation eindeutig vorsieht).

Lassen Sie uns noch einmal zusammenfassen (den Pfad/Dateinamen abrufen):

  • ältere Browser (und neuere Browser, bei denen dies als Option wie IE> = 8 aktiviert werden könnte) zeigen einen vollständigen Windows/Unix-Pfad an
  • weniger ältere Browser zeigen keinen Pfad an, nur einen Dateinamen (+ Erweiterung)
  • aktuelle/zukünftige/HTML5-kompatible Browser werden die Zeichenfolge immer voranstellen: c:\fakepath\ auf den Dateinamen, wenn der Wert der Dateieingabe abgerufen wird.
    Außerdem geben sie nur dann first filename (aus einer 'Liste ausgewählter Dateien') zurück, wenn die Dateieingabe mehrere Dateien akzeptiert und der Benutzer mehrere Dateien ausgewählt hat.

Daher wird man in der jüngeren Vergangenheit, aktuell und in absehbarer Zeit in HTML5, normalerweise nur den Dateinamen erhalten.

Das bringt uns zu dem letzten Punkt, den wir untersuchen müssen: Diese 'Liste ausgewählter Dateien'/Mehrfachdateien, die uns zum dritten Teil des Puzzles führt:

(HTML5) Datei-API

Zuallererst: Die 'File API' sollte nicht mit der ' File System API ' verwechselt werden. Hier ist die Zusammenfassung der File System API:

Diese Spezifikation definiert eine API zum Navigieren in Dateisystemhierarchien und ein Mittel, mit dem ein Benutzeragent Sandkastenabschnitte des lokalen Dateisystems eines Benutzers für Webanwendungen verfügbar machen kann. Es baut auf [FILE-WRITER-ED] auf, das wiederum auf [FILE-API-ED] aufbaut und jeweils eine andere Art von Funktionalität hinzufügt.

Die 'Sandbox-Abschnitte des lokalen Dateisystems eines Benutzers' zeigen bereits deutlich an, dass man damit keine Benutzerdateien außerhalb der Sandbox finden kann (also für die Frage nicht relevant, obwohl man den Benutzer könnte kopieren) -ausgewählte Datei in den persistenten lokalen Speicher und erneutes Hochladen dieser Kopie mit AJAX usw. Nützlich als 'Wiederholung' bei fehlgeschlagenem Hochladen. Aber es wäre kein Zeiger auf das Original Datei, die sich in der Zwischenzeit möglicherweise geändert hat).
Noch wichtiger ist die Tatsache, dass nur ein Webkit (denken Sie an ältere Versionen von Chrome) dieses Feature implementiert hat und die Spezifikation höchstwahrscheinlich nicht überleben wird, da es is no more actively maintained, the specification is abandonned for the moment as it didn't get any significant traction

Fahren wir mit ' File API ' fort.
es ist abstrakt sagt uns:

Diese Spezifikation bietet eine API zum Darstellen von Dateiobjekten in Webanwendungen sowie zum programmgesteuerten Auswählen und Zugreifen auf ihre Daten. Das beinhaltet:

  • Eine FileList-Schnittstelle, die ein Array von individuell ausgewählten Dateien aus dem zugrunde liegenden System darstellt. Die Benutzerschnittstelle zur Auswahl kann über <input type="file"> aufgerufen werden, d. H. Wenn sich das Eingabeelement im Datei-Upload-Status [HTML] befindet.
  • Eine Blob-Schnittstelle, die unveränderliche binäre Rohdaten darstellt und den Zugriff auf Bytebereiche innerhalb des Blob-Objekts als separates Blob ermöglicht.
  • Eine Dateischnittstelle, die schreibgeschützte Informationsattribute zu einer Datei enthält, z. B. den Namen und das Datum der letzten Änderung (auf der Festplatte) der Datei.
  • Eine FileReader-Schnittstelle, die Methoden zum Lesen einer Datei oder eines Blobs sowie ein Ereignismodell zum Abrufen der Ergebnisse dieser Lesevorgänge bereitstellt.
  • Ein URL-Schema zur Verwendung mit Binärdaten, z. B. Dateien, damit in Webanwendungen auf sie verwiesen werden kann.

Daher kann FileList von einem Eingabefeld im Dateimodus ausgefüllt werden: <input type="file">.
Das bedeutet, dass all das, was oben über das Wertattribut steht, immer noch gilt!

Wenn sich ein Eingabefeld im Dateimodus befindet, erhält es ein read-only Attribut files , das auf einen Array-ähnlichen FileList object verweist Auf die vom Benutzer ausgewählten Dateien des Eingabeelements kann über den FileList interface zugegriffen werden.
Habe ich schon erwähnt, dass das files- Attribut vom Typ FileList read-only ist (Datei-API, Abschnitt 5.2) ? :

Die HTMLInputElement-Schnittstelle [HTML] hat ein schreibgeschütztes Attribut vom Typ FileList ...

Was ist mit Drag & Drop ?

Aus der mdn-Dokumentation - Dateien per Drag & Drop auswählen

Die wahre Magie geschieht in der drop () -Funktion:

function drop(e) {
  e.stopPropagation();
  e.preventDefault();

  var dt = e.dataTransfer;
  var files = dt.files;

  handleFiles(files);
}

Hier rufen wir das dataTransfer-Feld aus dem Ereignis ab, ziehen dann die Dateiliste daraus heraus und übergeben diese an handleFiles (). Ab diesem Zeitpunkt ist die Handhabung der Dateien gleich, unabhängig davon, ob der Benutzer das Eingabeelement verwendet oder per Drag & Drop.

Also hat das dataTransfer -Attribut des Ereignisses (genau wie das Eingabefeld type = "file") ein Array-ähnliches Attribut files, das ein Array-ähnlicher FileList object ist, und wir haben es gerade gelernt (oben) dass die FileList read-only .. ist.

Die Dateiliste enthält Verweise auf die Datei (en), die ein Benutzer ausgewählt (oder auf einem Ablageziel abgelegt) hat, und einige Attribute. Aus dem File API Section 7.2 File Attributes können wir lesen:

name

Der Name der Datei; Beim Abrufen muss der Name der Datei als Zeichenfolge zurückgegeben werden. Es gibt zahlreiche Variationen von Dateinamen auf verschiedenen Systemen. Dies ist lediglich der Name der Datei ohne Pfadangabe. Wenn Benutzerprogramme diese Informationen nicht verfügbar machen können, müssen sie beim Abrufen die leere Zeichenfolge zurückgeben.

zuletzt geändertes Datum

Das letzte Änderungsdatum der Datei. Wenn Benutzerprogramme diese Informationen zur Verfügung stellen können, muss beim Abrufen ein neues Date [HTML] -Objekt zurückgegeben werden, das auf das letzte Änderungsdatum der Datei initialisiert wurde. Wenn das Datum und die Uhrzeit der letzten Änderung nicht bekannt sind, muss das Attribut das aktuelle Datum und die aktuelle Uhrzeit als Date-Objekt zurückgeben.

und es gibt ein size Attribut:

F.size entspricht der Größe des fileBits-Blob-Arguments, bei dem es sich um die unveränderlichen Rohdaten von F. handeln muss.

Wieder kein Pfad, nur der Dateiname read-only .

Somit:

  • (Elm_input||event.dataTransfer).files gibt das FileList-Objekt an.
  • (Elm_input||event.dataTransfer).files.length gibt die Anzahl der Dateien an.
  • (Elm_input||event.dataTransfer).files[0] ist die erste ausgewählte Datei.
  • (Elm_input||event.dataTransfer).files[0].name ist der Dateiname der ersten ausgewählten Datei
    (und dies ist das value, das von einem Eingabetyp = "Datei" zurückgegeben wird).

Was ist mit diesem 'URL-Schema zur Verwendung mit binären Daten wie Dateien, auf die in Webanwendungen verwiesen werden kann', das sicherlich einen privaten Verweis auf eine Datei enthalten kann, die ein Benutzer ausgewählt hat?

Aus der Datei-API - Eine URL für Blob- und Datei-Referenz können wir Folgendes lernen:

Diese Spezifikation definiert ein Schema mit URLs der Art:
Blob: 550e8400-e29b-41d4-a716-446655440000 # aboutABBA.

Diese sind in einem URL store gespeichert (und Browser sollten sogar einen eigenen Mini-HTTP-Server an Bord haben, damit diese URLs in css, img src und sogar in XMLHttpRequest verwendet werden können.

Man kann diese Blob URLs erstellen mit:

  • var myBlobURL=window.URL.createFor(object); gibt einen Blob URL zurück, der nach seiner ersten Verwendung automatisch widerrufen wird.
  • var myBlobURL=window.URL.createObjectURL(object, flag_oneTimeOnly); gibt einen wiederverwendbaren Blob URL zurück (es sei denn, flag_oneTImeOnly ergibt true) und kann mit window.URL.revokeObjectURL(myBlobURL) widerrufen werden.

Bingo, wie Sie vielleicht denken, ... jedoch ... wird der URL Store nur während einer Sitzung beibehalten (sodass er eine Seitenaktualisierung überlebt, da es sich immer noch um dieselbe Sitzung handelt) und geht verloren, wenn das Dokument entladen wird.

Aus dem MDN - Using object URLs :

Die Objekt-URL ist eine Zeichenfolge, die das Dateiobjekt identifiziert. Bei jedem Aufruf von window.URL.createObjectURL () wird eine eindeutige Objekt-URL erstellt, auch wenn Sie bereits eine Objekt-URL für diese Datei erstellt haben. Jeder von diesen muss freigegeben werden. Sie werden zwar beim Entladen des Dokuments automatisch freigegeben, aber wenn Ihre Seite sie dynamisch verwendet, sollten Sie sie explizit freigeben, indem Sie window.URL.revokeObjectURL () aufrufen.

Das heißt, selbst wenn Sie den Blob URL string in einem Cookie oder in einem persistenten lokalen Speicher ablegen, ist dieser String in einer neuen Sitzung nutzlos!

Das sollte uns zu einem vollständigen Kreis bringen und zum endgültigen Ergebnis:
Es ist nicht möglich, ein Eingabefeld oder eine vom Benutzer ausgewählte Datei (erneut) auszufüllen. (Diese Datei befindet sich nicht im Sandkasten-Bereich "Lokaler Speicher" des Browsers.) .
(Es sei denn, Sie erzwingen, dass Ihre Benutzer eine veraltete Version von Opera verwenden, oder Sie erzwingen, dass Ihre Benutzer IE und einige ActiveX-Codierungen/-Module (Implementierung eines benutzerdefinierten Dateiauswahlprogramms) usw. verwenden.)

Einige weitere Lektüre:
http://www.cs.tut.fi/~jkorpela/forms/file.html
https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications
http://www.html5rocks.com/en/tutorials/file/filesystem/
http://www.html5rocks.com/en/tutorials/file/dndfiles/
http://caniuse.com/filereader
JavaScript: The Definitive Guide - David Flanagan, Kapitel 22: Das Dateisystem api
Wie speichere ich das window.URL.createObjectURL () -Ergebnis für die zukünftige Verwendung?
Wie lange hält ein Blob an?
Wie löse ich den C:\fakepath?

205
GitaarLAB

Erstellen Sie ein Eingabefeld in Ihrem Formular. Wenn der Benutzer eine Datei auswählt, kopieren Sie das Ergebnis in dieses Feld.

jQuery('#inFile').change(
 function(){ jQuery('#inCopy').val( jQuery('#inFile').val() ); }
);

Tatsächlich wird das Ergebnis nicht genau kopiert, sondern es wird "C:/fakepath/SELECTED_FILE_NAME" kopiert. Während Sie den Wert einer Dateieingabe nicht festlegen dürfen, können Sie den Wert des Texteingabefelds ohne "C:/fakepath /" festlegen, während der Server das Formular vorbereitet.

Wenn der Server das Formular zurückerhält, überprüfen Sie das Texteingabefeld. Wenn es mit "C:/fakepath /" beginnt, muss der Benutzer eine neue Datei ausgewählt haben, also seine neue Auswahl hochladen. Wenn dies nicht der Fall ist, hat sich der Benutzer für die vorherige Auswahl entschieden, was kein Problem sein sollte, da gemäß der ursprünglichen Frage die vorherige Auswahl zuvor hochgeladen wurde und SOLLTE (zumindest bei entsprechender Programmierung, es KÖNNTE) noch vorhanden ist auf dem Server.

1
DaveWalley

Bei der Gefahr, auf die enormen Informationen von GitaarLAB zu stoßen, könnte ich vorschlagen, dass DaveWalley sehr nahe daran liegt, eine praktische Lösung für das Problem zu finden. Ihr beide habt mir sehr geholfen, danke.

Meine Mitteilung zum Mitnehmen lautet:

  1. Die Dateieingabe bietet eine Einbahnstraße. Es wartet dort auf Ihren nächsten Upload. Das ist alles, was es macht. Es empfängt
  2. Ein div oder schreibgeschütztes Textformular, das sich in der Nähe der Beschriftung für Ihre Dateieingabe befindet, kann das server ausführen. Das heißt, es kann verwendet werden, um dem Benutzer mitzuteilen: "Hier ist das, was gerade hochgeladen wird:" - Der anzuzeigende Dateiname muss von Ihrer serverseitigen Logik ausgefüllt werden.

Ein grundlegender Anwendungsfall wäre also:

  • benutzer lädt die Datei per Formulareingabe auf der Webseite hoch 
  • Serverseitige Logik speichert die Datei 
  • In einem Ajax-Zyklus oder beim Neuladen einer Webseite identifiziert der serverseitige Code eine fileName-Zeichenfolge, die in das div geschrieben werden soll: "Hier ist das, was gerade hochgeladen wird" 
  • Die Dateieingabe kann auch erneut dargestellt werden, sodass der Benutzer stattdessen auch eine andere Datei hochladen kann.

Möglicherweise müssen Sie mehr Arbeit erledigen, um eine "* erforderliche" Validierung durchzuführen, aber das ist eine andere Geschichte.

0
owenmck