2009-06-19 9 views
64

Gibt es eine Möglichkeit, den Wert einer Dateieingabe festzulegen (<input type="file" />) oder ist das alles aus Sicherheitsgründen blockiert? Ich versuche die OpenFiles von Google Gears zu verwenden, um einen einfachen Multi-Uploader zu erstellen.Dynamisch festgelegter Wert einer Dateieingabe

Hinweis:

Die Antwort (en) unten Nun der Zustand von Legacy-Browser reflektiert im Jahr 2009. Sie den Wert des Dateieingabeelementes tatsächlich eingestellt dynamisch/programmatisch mit Hilfe von JavaScript in 2017.

Siehe die Antwort auf diese Frage für Details sowie eine Demo:
How to set file input value programatically (i.e.: when drag-dropping files)?

+1

Ich bin mir ziemlich sicher, dass Sie richtig sind und Eingabefelder Datei sind nur lesbar. –

+3

Ich habe eine vollständig referenzierte und aktuelle (Dez 2013) Antwort hierüber: [Erinnern Sie sich und füllen Sie die Dateieingabe neu] (http://stackoverflow.com/a/20537822/588079) – GitaarLAB

+1

Erneut öffnen. 62 + 62 upvotes (ganz zu schweigen von +15 Lesezeichen) bedeuten mehr als irgendeine Meinung von jemandem – Green

Antwort

65

Es ist nicht möglich, Dyna Ändern Sie automatisch den Wert eines Dateifeldes, sonst könnten Sie es auf "c: \ yourfile" setzen und Dateien sehr einfach stehlen.

Allerdings gibt es viele Lösungen für ein Multi-Upload-System. Ich vermute, dass Sie einen offenen Multi-Auswahl-Dialog haben möchten.

Vielleicht werfen Sie einen Blick auf - es ist eine sehr flexible Lösung für mehrere Datei-Uploads und unterstützt Drop-Zonen e.t.c.

+1

Jemand hat die URL durch eine URL ersetzt, die funktioniert. – JohnK

+0

Ich denke, diese Antwort ist veraltet. Es ist nicht mehr möglich, eine Standarddatei festzulegen, da sie über die FileReader-API gelesen und von XHR gesendet werden kann. Die Tatsache, dass "input.files" schreibgeschützt ist, ist wahrscheinlich eine Frage des Vermächtnisses. –

+0

Die Frage ist "Gibt es eine Möglichkeit, den Wert einer Dateieingabe festzulegen"? Und die Antwort sagt "Es ist nicht möglich" .. immer noch gültige Antwort nein? Was hat es mit der FileReader API oder XHR zu tun? – Joel

0

Ich hatte ähnliches Problem, dann habe ich versucht, dies von JavaScript zu schreiben, und es funktioniert! :

+4

Inwiefern "funktioniert" das? Die [Mozilla Docs] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#File_inputs) gibt explizit an: "Sie können den Wert einer Dateiauswahl nicht aus einem Skript festlegen ; etwas wie [dies] hat keinen Effekt " – MrWhite

+6

... abgesehen von _clearing_ die Dateiauswahl. – MrWhite

+2

Die Frage ist, den Wert einer Dateieingabe zu setzen, nicht zu löschen. –

2

Ich arbeite an einer eckigen js app, undhavecome über ein ähnliches Problem. Was ich getan habe, war das Bild von der db anzuzeigen, und dann eine Schaltfläche erstellt, um das aktuelle Bild zu entfernen oder zu behalten. Wenn der Benutzer entschied, das aktuelle Bild zu behalten, änderte ich das ng-submit-Attribut zu einer anderen Funktion, die keine Bildvalidierung erfordert, und aktualisierte den Datensatz in der db, ohne den ursprünglichen Bildpfadnamen zu berühren. Die Funktion "Bild entfernen" änderte auch den Attributwert "ng-submit" zurück zu einer Funktion, die das Formular übermittelt und Bildvalidierung und -upload umfasst. Auch ein bisschen Javascript, um die Ansicht zu verschieben, um ein neues Bild hochzuladen.

-1

ich am Ende etwas zu tun, wie dies für AngularJS falls jemand über diese Frage bis stolpert:

const imageElem = angular.element('#awardImg'); 

if (imageElem[0].files[0]) 
    vm.award.imageElem = imageElem; 
    vm.award.image = imageElem[0].files[0]; 

Und dann:

if (vm.award.imageElem) 
    $('#awardImg').replaceWith(vm.award.imageElem); 
    delete vm.award.imageElem;