POST unmittelbar nach Auswahl einer Datei

Lesezeit: 4 Minuten

Benutzer-Avatar
Cheok Yan Cheng

Ich habe den folgenden HTML-Code

<form action="/script/upload_key.py" method="POST" enctype="multipart/form-data"> 
    Key filename: <input name="file_1" type="file"> 
    <input name="submit" type="submit"> 
</form> 

was mir folgendes Zeug gibt.

Alt-Text

Ich frage mich

  1. Wie kann ich JavaScript verwenden, um die Notwendigkeit von zu beseitigen Submit Taste. Das ist gemein, sobald ich Choose Filedie ausgewählte Datei wird sofort hochgeladen?
  2. Wie kann ich sicherstellen, dass das Feld zum Anzeigen des ausgewählten Dateinamens lang genug ist, sodass … nicht angezeigt wird?

  • Warum sollten Sie die Schaltfläche „Senden“ umgehen? Und wenn Sie #1 verwalten, spielt #2 keine Rolle, da der Benutzer direkt nach der Auswahl der Datei umgeleitet wird.

    – Evan Mulawski

    19. Januar 2011 um 0:51 Uhr


  • Sobald ich also versehentlich die falsche Datei auswähle, wird sie hochgeladen, ohne dass ich bestätigen muss, dass die falsche Datei hochgeladen werden soll, indem ich auf die Schaltfläche „Senden“ drücke.

    – Stefan P

    19. Januar 2011 um 1:01 Uhr

Benutzer-Avatar
Lepe

Um es sofort einzureichen, tun Sie einfach Folgendes:

<input name="file_1" type="file" onchange="this.form.submit();">

Wenn Sie JQuery verwenden:

$("input[name="file_1"]").change(function() { this.form.submit(); });

Zu deinen anderen Fragen:

1) Es gibt viele Methoden da draußen … zum Beispiel:

http://valums.com/ajax-upload/

http://www.webtoolkit.info/ajax-file-upload.html

(und viele mehr. Googlen Sie einfach nach: “Ajax-Datei-Upload” oder “Iframe-Datei-Upload”)

2) Machen Sie sich keine Sorgen über die Breite des Feldes. Da Sie nicht wissen, wie lang der Weg sein kann, wäre er nie lang genug (glaube ich). Auch Browser können es sehr unterschiedlich darstellen. Zum Beispiel Safari oder Chrome zeigen es ganz anders als Firefox oder IE. Verwenden Sie einfach die Standardlänge oder diejenige, die besser zu Ihrem Design passt.

  • Sie benötigen das Präfix „javascript:“ in den onevent-Attributen nicht

    – Sime Vidas

    19. Januar 2011 um 1:21 Uhr


  • Schlägt auf IE8 fehl, da der Zugriff auf den Aufruf zum Senden verweigert wird.

    – Maurice Flanagan

    12. September 2012 um 23:02 Uhr

Falls Sie bei der Auswahl der Dateieingabe nicht das gesamte Formular senden möchten oder müssen, können Sie dies tun, um nur die Datei zu senden:

$(document).ready(function (e) {
	$("#uploadImage").on('change',(function(e) {
		// append file input to form data
		var fileInput = document.getElementById('uploadImage');
		var file = fileInput.files[0];
		var formData = new FormData();
		formData.append('uploadImage', file);

		$.ajax({
			url: "ajaxupload.php",
			type: "POST",
			data: formData,
			contentType: false,
			cache: false,
			processData:false,
			success: function(data) {
				if(data=='invalid') {
					// invalid file format.
					$("#err").html("Invalid File !").fadeIn();
				}

				else {
					// view uploaded file.
					$("#preview").html(data).fadeIn();
					$("#form")[0].reset();
				}
			},
			error: function(e) {
				$("#err").html(e).fadeIn();
			}
		});
	}));
});
<form id="form" action="ajaxupload.php" method="post" enctype="multipart/form-data">
  <input id="uploadImage" type="file" accept="image/*" name="uploadImage">
  <input class="btn btn-success" type="submit" value="Upload">
  
  <div id="err"></div>
</form>

Sie erhalten also zuerst das Eingabedateielement mit getElementById(), dann hängen Sie an FormData an und senden dann die FormData als Daten in Ihrem Ajax-Aufruf. Führen Sie die serverseitige Upload-Verarbeitung in ajaxupload.php durch.

Für den ersten:

<input name="file_1" type="file" onchange="this.form.submit()">

Ich bin mir nicht sicher, ob ich das Feld breit genug machen soll. Manchmal wird CSS in Datei-Upload-Feldern lahmgelegt, um Exploits zu verhindern.

  • Um Dateieingaben zu formatieren, müssen Sie im Allgemeinen den Trick anwenden, ein transparentes Phantom-Dateieingabeelement über einige Dummy-Elemente zu legen, die so aussehen, wie Sie es möchten.

    – Spitze

    19. Januar 2011 um 0:52 Uhr

  • Ich habe es vor langer Zeit einmal so gemacht und habe seitdem entschieden, dass es normalerweise am besten ist, Formulareingaben beizubehalten, da die Leute erwarten würden, wie sie nativ gerendert werden. Hier ist die Anleitung, wenn Sie es wirklich so machen wollen: quirksmode.org/dom/inputfile.html

    – scragz

    19. Januar 2011 um 1:25 Uhr

Benutzer-Avatar
dpmguise

Schätzen Sie grob, was Sie wollen – wenn sich das Textfeld ändert, wird es die Formularübermittlung auslösen

$('.target').change(function() {
  document.forms["myform"].submit();
});

Bearbeiten: Entschuldigung, ich habe jQuery verwendet …

Wenn Sie das Formular bei einer Änderung absenden, werden Sie nicht bemerken, dass das Feld ausgefüllt wird, und sollten daher die Textlänge nicht ändern müssen. Wenn Sie möchten, würde ich die Zeichenanzahl der Zeichenfolge im Feld abrufen und dann ein Größenattribut auf die Eingabe anwenden

mylength = document.getElementById('myfield').value
document.getElementById('myfield').size = mylength;

1145450cookie-checkPOST unmittelbar nach Auswahl einer Datei

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy