439 Stimmen

Wie setzt man einen Wert für eine Dateieingabe in HTML fest?

Wie kann ich den Wert davon festlegen?

3 Stimmen

Ich habe hier eine vollständige, referenzierte und auf dem neuesten Stand (Dezember 2013) Antwort dazu verfasst: Remember and Repopulate File Input

1 Stimmen

1) Das Problem mit dem Standardwert bei einer Dateieingabe wird NICHT "aus Sicherheitsgründen" gemacht, sondern die Browser "scheiterten einfach daran, es auszuführen, ohne guten Grund": siehe diesen ausführlichen Bericht 2) Eine einfache Lösung kann sein, einen Texteingabe über die Dateieingabe zu platzieren, wie hier. Natürlich benötigen Sie etwas Code, um die Datei zu senden, wobei jetzt der Wert in der Texteingabe und nicht in der Dateieingabe verwendet wird. In meinem Fall, da ich eine HTA-Anwendung erstelle, ist das kein Problem, da ich überhaupt kein Formular verwende.

651voto

BalusC Punkte 1034465

Sie können es nicht auf einen Pfad des Dateisystems eines Client-Seitendisks setzen, aus Sicherheitsgründen.

Stellen Sie sich vor:

document.foo.submit();

Sie möchten nicht, dass die von Ihnen besuchten Websites dies tun können, oder? =)

Sie können es nur auf eine öffentlich zugängliche Webressource setzen, wie in dieser Antwort zu sehen ist, aber dies ist klarerweise nicht dasselbe wie ein Pfad des Dateisystems eines Client-Seitendisks und daher in diesem Zusammenhang nutzlos.

174voto

Guffa Punkte 663241

Sie können es nicht.

Der einzige Weg, den Wert eines Dateieingabe festzulegen, ist durch Auswahl einer Datei durch den Benutzer.

Dies erfolgt aus Sicherheitsgründen. Andernfalls wäre es möglich, ein JavaScript zu erstellen, das automatisch eine bestimmte Datei vom Computer des Benutzers hochlädt.

1 Stimmen

Und was ist, wenn ich den Wert der Dateieingabe auf einen generierten Inhalt (nicht von der Festplatte) setzen möchte?

1 Stimmen

@EugeneMala: Der Wert des Datei-Eingabe ist eine Datei, die der Benutzer ausgewählt hat. Sie können keinen anderen Inhalt in den Wert einfügen.

2 Stimmen

@guffa Das ist tatsächlich falsch, man KANN Blob-Werte in den Datei-Eingabewert setzen, es muss nicht unbedingt vom Benutzer stammen, aber ja, man kann sicherlich keine Daten auf dem Computer des Benutzers platzieren.

61voto

Wim Punkte 10783

Keine Antwort auf Ihre Frage (die andere bereits beantwortet haben), aber wenn Sie die Bearbeitungsfunktion eines hochgeladenen Dateifeldes haben möchten, was Sie wahrscheinlich tun möchten, ist:

  • den aktuellen Wert dieses Feldes anzeigen, indem Sie einfach den Dateinamen oder die URL ausdrucken, einen anklickbaren Link zum Herunterladen erstellen oder, wenn es sich um ein Bild handelt: nur zeigen, möglicherweise als Miniaturansicht
  • Das Tag zum Hochladen einer neuen Datei
  • ein Kontrollkästchen, das beim Ankreuzen die aktuell hochgeladene Datei löscht. Beachten Sie, dass es keine Möglichkeit gibt, eine 'leere' Datei hochzuladen, daher benötigen Sie so etwas, um den Wert des Feldes zu löschen

3 Stimmen

Ich denke, das ist das, was ich brauche. Wenn ich Produktinformationen bearbeiten möchte (das Produktbild nicht ändern möchte), wie sollte ich auf das vorhandene Produktbild setzen? Ich kann das vorhandene Bild in einem Tag anzeigen, aber beim Absenden wird keine Datei übermittelt.

0 Stimmen

@Partho63 Warum möchtest du erneut hochladen? Wenn das aufgrund der obligatorischen Formularvalidierung ist, kannst du das Datei-Input-Feld irgendwie als nicht erforderlich markieren, wenn das Bild bereits hochgeladen wurde.

44voto

Eimantas Punkte 48130

Du kannst das nicht. Und das ist eine Sicherheitsmaßnahme. Stell dir vor, jemand schreibt JS, das den Wert der Dateieingabe auf eine sensible Datei setzt?

36voto

Đinh Tiến Vũ Punkte 137

Ich habe ein vollständiges Beispiel zum Laden von URLs in eine Eingabedatei und Vorschau geschrieben Bildbeschreibung hier eingeben Sie können hier überprüfen 1 https://vulieumang.github.io/vuhocjs/file2input-input2file/

kurz gesagt, Sie können diese Funktion verwenden

function loadURLToInputFiled(url){
  getImgURL(url, (imgBlob)=>{
    // Laden Sie den Bildblob in die Eingabe
    // WIP: UTF8-Zeichenfehler
    let fileName = 'hasFilename.jpg'
    let file = new File([imgBlob], fileName,{type:"image/jpeg", lastModified:new Date().getTime()}, 'utf-8');
    let container = new DataTransfer(); 
    container.items.add(file);
    document.querySelector('#file_input').files = container.files;

  })
}
// xmlHTTP gibt blob-Antwort zurück
function getImgURL(url, callback){
  var xhr = new XMLHttpRequest();
  xhr.onload = function() {
      callback(xhr.response);
  };
  xhr.open('GET', url);
  xhr.responseType = 'blob';
  xhr.send();
}

0 Stimmen

Das ist ein wunderschönes Design des Codes. Ich kann das sogar mit data:image verwenden, was für meinen Verwendungszweck erstaunlich ist. Frage: Ist es schwer, deinen Code so zu bearbeiten, dass er mehrere Bild-URLs zulässt? Das wäre großartig! Freue mich auf deine Antwort und vielleicht eine Bearbeitung, um haha einzuschließen.

1 Stimmen

Das ist verrückt, die ersten 4 Antworten behaupten, dass es nicht möglich ist (mit mehr als 600 Stimmen), während diese Antwort es so elegant macht, es hat so gut für meinen Anwendungsfall funktioniert

0 Stimmen

@aussiedan, bedeutet das, dass du mehrere Bild-Urls in eine Eingabe laden möchtest oder in mehrere Eingaben?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X