zu Testzwecken File-Upload simulieren
Ralf
- javascript
Hallo,
Ziel wäre es, ein kleines Test-Skript auf JavaScript-Basis zu schreiben, das ein File-Upload-Formular mit unterschiedlichen Inhalten abschickt, um noch offene Probleme im verarbeitenden Backend aufzuspüren.
( Es geht in dem Fall also NICHT darum, den grauen Standard-Button neben dem File-Upload-Feld wegzubekommen / umzustylen. ;) )
Kennt jemand ein Skript, das die Aufgabe des automatisches Starten eines File-Uploads ohne Zutun des Users (wobei die hochgeladenen Daten nicht aus einer Datei auf dem localhost kommen müssen / dürfen, die sollten on the fly generiert und als Multipart angehängt werden, geht ja nur um eine Simulation zu Testzwecken).
Lässt sich so ein File-Upload simulieren?
Gruß vom Ralf
Klingt für mich nach einen Fall für Mechanize (Ruby / Python).
Ich sehe jetzt keinen Vorteil das mit Javascript zu machen, und bin mir auch nicht ganz sicher ob man Dateien usw... generieren kann damit.
Klingt für mich nach einen Fall für Mechanize (Ruby / Python).
Ich sehe jetzt keinen Vorteil das mit Javascript zu machen, und bin mir auch nicht ganz sicher ob man Dateien usw... generieren kann damit.
Der Vorteil bestünde darin, dass man es per JavaScript bzw. jQuery noch in den Client-Code (also ins "HTML-Dokument") dazuhängen kann, während man bei Skript-Sprachen einen Server aufsetzen muss und im Endeffekt geht es ja nur darum, einen Request vom Client an den Server zu senden - sofern die möglich ist.
Ziel: Das Skript bzw. Servlet auf dem Server soll so versorgt werden, als ob der Request durch den Submit eines Forms mit File-Upload-Feld ausgelöst worden wäre.
während man bei Skript-Sprachen einen Server aufsetzen muss
Das ist inkorrekt. Das geht mit stinknormalen Kommandozeilenprogrammen, z.B. (ungetested):
use HTTP::Request::Common qw(POST);
use LWP::UserAgent qw();
my $ua = LWP::UserAgent->new;
$ua->request(
POST(
'http://example.org/endpoint',
Content_Type => 'form-data',
Content => [
field_name => ['file_name'],
],
)
);
Hi (fast namesvetter),
Kennt jemand ein Skript, das die Aufgabe des automatisches Starten eines File-Uploads ohne Zutun des Users
Wenn das möglich wäre hätten wir alle wohl schon zigtausend viren auf dem rechner.
oder meinst du was anderes?
ralphi
Hi (fast namesvetter),
Kennt jemand ein Skript, das die Aufgabe des automatisches Starten eines File-Uploads ohne Zutun des Users
Wenn das möglich wäre hätten wir alle wohl schon zigtausend viren auf dem rechner.
oder meinst du was anderes?
Vermutlich schon... :) Es soll nicht darum gehen, Code vom Server ohne Zustimmung des Users auf dem Client zu installieren, also ich suche keine Sicherheitslücken im Browser, sondern das bereits bestehende Skript bzw. Servlet auf dem Server soll so von einem automatisierten Code auf dem Client versorgt werden, als ob der Request durch den Submit eines Forms mit File-Upload-Feld ausgelöst worden wäre.
Ich möchte also nicht manuell zigtausend Files mit unterschiedlichem Content generieren und diese einzeln hochladen müssen, um zu sehen, ob der Code auf dem Server alles korrekt parst. Da wäre es sehr praktisch, wenn sich der Vorgang automatisieren ließe. ;)
Hallo!
Ziel wäre es, ein kleines Test-Skript auf JavaScript-Basis zu schreiben, das ein File-Upload-Formular mit unterschiedlichen Inhalten abschickt, um noch offene Probleme im verarbeitenden Backend aufzuspüren.
Hmmm ...., das klingt für mich nach "trial and error" und somit für keine geeignete Maßnahme, "um noch offene Probleme im verarbeitenden Backend aufzuspüren."
Um welche "Art" von Dateien/ Daten darf es sich denn bei dem Upload handeln? Und wie wird der Upload anschließend auf dem Server (weiter)verarbeitet?
Kennt jemand ein Skript, das die Aufgabe des automatisches Starten eines File-Uploads ohne Zutun des Users (wobei die hochgeladenen Daten nicht aus einer Datei auf dem localhost kommen müssen / dürfen, die sollten on the fly generiert und als Multipart angehängt werden, geht ja nur um eine Simulation zu Testzwecken).
Ein Formular ohne das Zutun des Users abzuschicken ist ja nicht das Problem - Stichwort "submit()". Auch das entsprechende Input-Feld mit einem Wert vorzubelegen, sollte kein Problem sein.
Was mir jetzt nur nicht so ganz einleuchtet ist, warum "die hochgeladenen Daten nicht aus einer Datei auf dem localhost kommen müssen / dürfen, die sollten on the fly generiert und als Multipart angehängt werden" sollen?
Gruß Gunther
Ein Formular ohne das Zutun des Users abzuschicken ist ja nicht das Problem - Stichwort "submit()". Auch das entsprechende Input-Feld mit einem Wert vorzubelegen, sollte kein Problem sein.
AFAICR wird die DOM-Manipulation durch Sicherheitsmaßnahmen unterbunden.
Ein Formular ohne das Zutun des Users abzuschicken ist ja nicht das Problem - Stichwort "submit()". Auch das entsprechende Input-Feld mit einem Wert vorzubelegen, sollte kein Problem sein.
AFAICR wird die DOM-Manipulation durch Sicherheitsmaßnahmen unterbunden.
Stimmt!
Aber als AJAX Upload lässt es sich (AFAIS) realisieren.
Gruß Gunther
Ein Formular ohne das Zutun des Users abzuschicken ist ja nicht das Problem - Stichwort "submit()". Auch das entsprechende Input-Feld mit einem Wert vorzubelegen, sollte kein Problem sein.
AFAICR wird die DOM-Manipulation durch Sicherheitsmaßnahmen unterbunden.
Der Inhalt des Feldes vom Type "file" lässt sich nicht per JavaScript ändern, s. z.B. auch
http://www.webdeveloper.com/forum/showthread.php?184694-Can-Javascript-change-value-in-input-type-file-field etc.
Hallo Ralf!
Ein Formular ohne das Zutun des Users abzuschicken ist ja nicht das Problem - Stichwort "submit()". Auch das entsprechende Input-Feld mit einem Wert vorzubelegen, sollte kein Problem sein.
AFAICR wird die DOM-Manipulation durch Sicherheitsmaßnahmen unterbunden.Der Inhalt des Feldes vom Type "file" lässt sich nicht per JavaScript ändern, s. z.B. auch
Hmmm ..., in dem von dir verlinkten Forenbeitrag steht aber doch genau im 2. Post:
"It is a security feature in browsers. You cannot change the value of an <input type="file"> using JavaScript."
Gruß Gunther
Guten Morgen!
Ein Formular ohne das Zutun des Users abzuschicken ist ja nicht das Problem - Stichwort "submit()". Auch das entsprechende Input-Feld mit einem Wert vorzubelegen, sollte kein Problem sein.
AFAICR wird die DOM-Manipulation durch Sicherheitsmaßnahmen unterbunden.Der Inhalt des Feldes vom Type "file" lässt sich nicht per JavaScript ändern, s. z.B. auch
Hmmm ..., in dem von dir verlinkten Forenbeitrag steht aber doch genau im 2. Post:
"It is a security feature in browsers. You cannot change the value of an <input type="file"> using JavaScript."
D.h., man kann den Inhalt nicht ändern und man kann also auch nicht einfach den Form-Submit-Trigger simulieren, weil in dem Input-Feld ja nichts drinsteht, solange der User (im Unterschied zum JavaScript-Code ;) ) nichts gewählt hat. :) Wahrscheinlich muss man einen eigenständigen AJAX-Call stricken, wobei ich mir über dessen Parameter noch nicht im Klaren bin und ich finde bisher auch kein Beispiel für diesen Fall. Wenn das auch an Browser-Sicherheitsbarrieren scheitert, muss man auf die Konsole ausweichen...
~> Kennt jemand einen Code-Schnipsel, der einen File-Upload via AJAX simuliert? Der File soll dabei nicht vom User gewählt werden müssen, sondern dessen Inhalt von woanders (z.B. ein String im Code oder was Simples in der Art) bezogen werden.
einen Code-Schnipsel, der einen File-Upload via AJAX simuliert?
Ungetestet:
// JavaScript hat keine Unterstützung für MIME in der Standardlibrary. So was beknacktes!
// JavaScript 5 kennt keine heredocs, was für ein Scheiß
var upload =
"------------------------------xyzzy\n\
Content-Disposition: form-data; name=\"field\"; filename=\"test.txt\"\n\
Content-Type: text/plain;charset=UTF-8\n\
\n\
\u2663\u2660\u2665\u2666\n\
\n\
------------------------------xyzzy--\n\
\n";
$(document).ready(function(){
$.ajax({
'contentType': 'multipart/form-data; boundary=----------------------------xyzzy',
'data': upload,
'dataType': 'text',
'type': 'POST',
'url': 'http://localhost:5000',
});
});
~> Kennt jemand einen Code-Schnipsel, der einen File-Upload via AJAX simuliert? Der File soll dabei nicht vom User gewählt werden müssen, sondern dessen Inhalt von woanders (z.B. ein String im Code oder was Simples in der Art) bezogen werden.
Fertigen Schnipsel habe ich keinen.
Grundsätzlicher Ablauf:
1. ArrayBuffer anlegen
2. Eine passende ArrayBufferView (zb. Uint8) auf 1. anlegen
3. 2. befüllen
4. Einen Blob aus 1. erzeugen
5. Einen XMLHttpRequest erzeugen
6. Ein FormData Objekt mit oder ohne vorhandene Formdaten erzeugen
7. Mit 6. ein append mit 'upload-feld-name' und 4. ausführen
8. 5. senden