enctype="multipart/form-data" - Funktioniert nicht!
Madness Phil
- asp.net
Hi,
ich habe ein Formular und möchte Dateien (Word oder PDF) auf den Server laden.
Wenn ich das enctype weglasse kann ich mit response.write Formularinhalte auf dem Bildschirm ausgeben.
Bei enctype.. komischerweise nicht.
Was kann hier falsch sein?
Enctype brauche ich ja zum Dateien hochladen..
Danke
Philip
Hier noch mal der Code:
<form action="knowledge.asp" method="post">
<!--<form action="knowledge.asp" method="post" enctype="multipart/form-data">-->
<b>Datei-Upload</b><br>
<br>
Hier haben Sie die Möglichkeit technische Dokumentationen hochzuladen und zu archivieren!
<br><br>
<input name="Datei1" type="file" size="50" maxlength="10485760" onClick="sichtbar(2);">
<input name="Datei2" type="file" size="50" maxlength="10485760" style="visibility:hidden;" onClick="sichtbar(3);">
<input name="Datei3" type="file" size="50" maxlength="10485760" style="visibility:hidden;" onClick="sichtbar(4);">
<input name="Datei4" type="file" size="50" maxlength="10485760" style="visibility:hidden;" onClick="sichtbar(5);">
<input name="Datei5" type="file" size="50" maxlength="10485760" style="visibility:hidden;" onClick="sichtbar(6);">
<input name="Datei6" type="file" size="50" maxlength="10485760" style="visibility:hidden;" onClick="sichtbar(7);">
<input name="Datei7" type="file" size="50" maxlength="10485760" style="visibility:hidden;" onClick="sichtbar(8);">
<input name="Datei8" type="file" size="50" maxlength="10485760" style="visibility:hidden;" onClick="sichtbar(9);">
<input name="Datei9" type="file" size="50" maxlength="10485760" style="visibility:hidden;" onClick="sichtbar(10);">
<input name="Datei10" type="file" size="50" maxlength="10485760" style="visibility:hidden;">
<br><br>
<input type="submit" name="hochladen" value="Upload">
</form>
Hallo,
Wenn ich das enctype weglasse kann ich mit response.write Formularinhalte auf dem Bildschirm ausgeben.
Ja, dann ist enctype standardmäßig application/x-www-form-urlencoded.
Bei enctype.. komischerweise nicht.
Bei enctype="multipart/form-data" nicht.
Was kann hier falsch sein?
This behavior is by design.
Bei enctype="multipart/form-data" sendet _jedes_ ausgefüllte/ausgewählte Formularfeld seine Daten als Part mit Content-Disposition und Content-Type. Deshalb ist auch ein Datei-Upload möglich. Deshalb kann man aber die Feldinhalte nicht mit der normalen Methode Request.Form abgreifen. Man kann sie nur mit Request.BinaryRead als Byte-Daten einlesen und dann auseinandernehmen.
Wie es mit purem ASP-VB-Script geht, steht hier: http://msdn.microsoft.com/library/en-us/dnasdj01/html/asp0900.asp?frame=true
Es gibt aber auch fertige ASP-Componenten, wie hier: http://www.aspsmart.com/aspSmartUpload/.
viele Grüße
Axel
Hi, danke erstmal, mit Komponenten werde ich es wohl nicht lösen, denke ich.
Aber warum zeigt er mir einen Fehler an, wenn ich eine Word Datei oder PDF Datei abschicke???
Fehler: Server oder DNS kann nicht gefunden werden
Internet Explorer
Danke
Philip
Hallo,
Aber warum zeigt er mir einen Fehler an, wenn ich eine Word Datei oder PDF Datei abschicke???
Fehler: Server oder DNS kann nicht gefunden werden
Internet Explorer
Der Browser kann keinen HTTP-Request an den Server senden, weil der Server nicht gefunden werden kann oder der Domain-Name-Service nicht erreichbar ist.
Das passiert aber garantiert nicht _nur_ beim Submit des Formulars, oder? Wenn ja, wie und von welcher URL forderst Du das Formular selbst an?
viele Grüße
Axel
Das passiert aber garantiert nicht _nur_ beim Submit des Formulars, oder? Wenn ja, wie und von welcher URL forderst Du das Formular selbst an?
doch, irgendwie schon!
Das alles läuft im Intranet - bei normalen textfiles und grafiken wird die seite, die unter action angegeben ist, normal geladen.
Danke für Deine Hilfe
Philip
Hallo,
Das alles läuft im Intranet - bei normalen textfiles und grafiken wird die seite, die unter action angegeben ist, normal geladen.
Ja, dann gibt es eine Erklärung. Das ASP-Script stürzt bei großen Files ab und liefert nichts zurück. Der Browser meint dann nach einer gewissen Zeit, dass der Server wohl down sein muss.
viele Grüße
Axel
OK!
Was kann ich dagegen tun?
Philip
hi,
Das ASP-Script stürzt bei großen Files ab und liefert nichts zurück. Der Browser meint dann nach einer gewissen Zeit, dass der Server wohl down sein muss.
Was kann ich dagegen tun?
wenn du (jetzt) weißt, dass schwere steine beim fallenlassen auf den fuss aua verursachen - dann lass halt keine schweren steine auf den fuss fallen ...
gruß,
wahsaga
wenn du (jetzt) weißt, dass schwere steine beim fallenlassen auf den fuss aua verursachen - dann lass halt keine schweren steine auf den fuss fallen ...
Das Script/die Anwendung muss aber Dateien bis zu einer Grösse von 10MB hochladen können...
Philip
Hallo,
Was kann ich dagegen tun?
Dein ASP-Script so anpassen, dass es mit großen Files klar kommt.
Btw.: Versuchst Du jetzt Files mit enctype="application/x-www-form-urlencoded" oder ganz ohne Angabe des enctype heraufzuladen? Das wird nicht funktionieren.
viele Grüße
Axel
Btw.: Versuchst Du jetzt Files mit enctype="application/x-www-form-urlencoded" oder ganz ohne Angabe des enctype heraufzuladen? Das wird nicht funktionieren.
??
Habe noch enctype="multipart/form-data" drinne
Im Moment mache ich da garnichts mit ASP - beim HTML schmiert der scheinbar schon ab!
Philip
Hallo,
Habe noch enctype="multipart/form-data" drinne
Im Moment mache ich da garnichts mit ASP - beim HTML schmiert der scheinbar schon ab!
Wie, Du machst gar nichts mit ASP? Dein Formular ruft doch eine ASP-Ressource auf. Wenn die gar nichts macht, ist der Fehler doch klar.
Oder versucht die wenigstens die Datei zu speichern und dann "Ich bin fertig." zurück zu geben? Wenn dies, dann könnte es an Einstellungen des IIS liegen. Google mal nach "IIS HTTP post large files" oder frage den Server-Admin.
viele Grüße
Axel
Danke,
ich probiers mal
Philip
Btw.: Versuchst Du jetzt Files mit enctype="application/x-www-form-urlencoded" oder ganz ohne Angabe des enctype heraufzuladen? Das wird nicht funktionieren.
Nochmal ne Frage, was wird nicht funktionieren nur das ohne Angabe des enctype oder beides?
Philip
Hallo,
Btw.: Versuchst Du jetzt Files mit enctype="application/x-www-form-urlencoded" oder ganz ohne Angabe des enctype heraufzuladen? Das wird nicht funktionieren.
Nochmal ne Frage, was wird nicht funktionieren nur das ohne Angabe des enctype oder beides?
Beides. Es ist beides identisch. Der enctype="application/x-www-form-urlencoded" ist Standard und wird verwendet, wenn Du keinen angibst.
viele Grüße
Axel
Moin!
Wenn ich das enctype weglasse kann ich mit response.write Formularinhalte auf dem Bildschirm ausgeben.
Was kann hier falsch sein?
Enctype brauche ich ja zum Dateien hochladen..
Das klassische ASP kann mit Dateiuploads NICHT umgehen (im Gegensatz zu PHP). Derartige Operationen benötigen IMMER eine Extrawurst, wobei der Markt der kommerziellen Software hierfür diverse Bezahlsoftware entwickelt hat, um diese schändliche Lücke, die Microsoft da gelassen hat, zu füllen.
Die im Server installierbaren Komponenten haben den Vorteil, dass sie noch vor dem Skriptstart den Upload in ein temporäres Verzeichnis packen und dann dem Skript selbst ein eigenes Objekt für den Zugriff auf diese Daten zur Verfügung stellen.
"Billiglösungen" (zumindest vom Preis her), die dasselbe in ASP-Code erreichen wollen, haben das Problem, dass sie längst nicht so schnell sind (im Vergleich zu kompilierten Modulen in C), dass der Empfang der Daten voll auf die Skriptlaufzeit angerechnet wird, und dass ASP grundsätzlich wohl ein Datenmengenproblem hat, also garnicht beliebig viel POST-Daten empfangen kann.
Nicht nur deswegen halte ich es vom zu erwartenden Erfolg her für etwas zweifelhaft, in einem Formular bis zu zehn Dateien mit bis zu zehn Megabyte Größe hochzulasen. :) Einzeln - OK.
- Sven Rautenberg
Hallo Sven,
Das klassische ASP kann mit Dateiuploads NICHT umgehen (im Gegensatz zu PHP).
Naja, bei _Classic_ ASP fehlt zwar bspw. ein Request.File Objekt
(bzw. die entsprechende Collection) aber mit ASP kann man nataürlich
trotzdem Dateiuploads verarbeiten.
Derartige Operationen benötigen IMMER eine Extrawurst, wobei der Markt der kommerziellen Software hierfür diverse Bezahlsoftware entwickelt hat, um diese schändliche Lücke, die Microsoft da gelassen hat, zu füllen.
Bei ASP.NET ist das aber natürlich nicht mehr so. Da gibts das von
Haus aus.
Die im Server installierbaren Komponenten haben den Vorteil, dass sie noch vor dem Skriptstart den Upload in ein temporäres Verzeichnis packen und dann dem Skript selbst ein eigenes Objekt für den Zugriff auf diese Daten zur Verfügung stellen.
? Bei was? Bei ASP? Dann hast du die Technologie nicht verstanden.
Wenn du PHP meinst, Ok. Da kenn ich mich nicht wirklich aus.
"Billiglösungen" (zumindest vom Preis her), die dasselbe in ASP-Code erreichen wollen, haben das Problem, dass sie längst nicht so schnell sind (im Vergleich zu kompilierten Modulen in C),
Wer macht denn heute sowas noch in C? Und warum soll das langsamer
sein? Wenn man weiß, wie es geht, ist das schon recht performant.
dass der Empfang der Daten voll auf die Skriptlaufzeit angerechnet wird, und dass ASP grundsätzlich wohl ein Datenmengenproblem hat, also garnicht beliebig viel POST-Daten empfangen kann.
Naja, ich nenn sowas gefährliches Halbwissen (von allem stimmt ein
wenig, aber das geschriebene ist falsch)
Tschau, Stefan
Moin!
Das klassische ASP kann mit Dateiuploads NICHT umgehen (im Gegensatz zu PHP).
Naja, bei _Classic_ ASP fehlt zwar bspw. ein Request.File Objekt
(bzw. die entsprechende Collection) aber mit ASP kann man nataürlich
trotzdem Dateiuploads verarbeiten.
Aber nicht nativ. Ein Dateiupload kommt ohne Zusatzextrawurst nicht an. Worin die Extrawurst nun besteht, sei es die Installation einer Upload-Komponente oder eines speziellen Upload-Skriptteiles, sei dahingestellt - der Programmierer hat Extraaufwand. Und wahrscheinlich Kontakt mit dem Serveradmin, um die verwendbaren Möglichkeiten zu klären.
Bei ASP.NET ist das aber natürlich nicht mehr so. Da gibts das von
Haus aus.
Rede ich von ASP.NET? Oben steht "Das klassische ASP".
Die im Server installierbaren Komponenten haben den Vorteil, dass sie noch vor dem Skriptstart den Upload in ein temporäres Verzeichnis packen und dann dem Skript selbst ein eigenes Objekt für den Zugriff auf diese Daten zur Verfügung stellen.
? Bei was? Bei ASP? Dann hast du die Technologie nicht verstanden.
Ähm... Welche Technologie meinst du? Was hab ich daran falsch verstanden? Und warum ist in einem von mir geschriebenen Upload-Skript für ASP sowas drin:
Set oFileUp = Server.CreateObject("SoftArtisans.FileUp")
Das ist doch exakt das, was ich meinte: "dem Skript selbst ein eigenes Objekt für den Zugriff auf diese Daten zur Verfügung stellen". Oder?
"Billiglösungen" (zumindest vom Preis her), die dasselbe in ASP-Code erreichen wollen, haben das Problem, dass sie längst nicht so schnell sind (im Vergleich zu kompilierten Modulen in C),
Wer macht denn heute sowas noch in C? Und warum soll das langsamer
sein? Wenn man weiß, wie es geht, ist das schon recht performant.
Von was redest du genau? Was benutzt man denn heute anstatt C?
Abgesehen davon: "Wenn man weiß, wie es geht, ist das schon recht performant" ist kein Widerspruch zu "ASP-Code ist langsamer, als C". Dass etwas in ASP "recht performant" ist, heißt ja nicht, dass es mit C-kompilierten Komponenten nicht noch schneller geht.
dass der Empfang der Daten voll auf die Skriptlaufzeit angerechnet wird, und dass ASP grundsätzlich wohl ein Datenmengenproblem hat, also garnicht beliebig viel POST-Daten empfangen kann.
Naja, ich nenn sowas gefährliches Halbwissen (von allem stimmt ein
wenig, aber das geschriebene ist falsch)
Leider fügst du aber nicht hinzu, was denn deiner Meinung nach richtig ist. Nicht sehr konstruktiv, wie ich finde. Aber das kann ja noch kommen...