<input type="file" ...> dynamisch ergänzen
Tom
- javascript
0 Sven Rautenberg0 Tom0 Sven Rautenberg0 Tom
Hello,
in einem Tom-Tom?-Tom1tk-TomIRL-Thread
[pref:t=65362&m=372043]
ist mal wieder ein Beispiel für Mime-Mail entstanden.
Das Script liegt vollständig auf meinem Server.
http://bitworks.de/~selfHTML/mime_mail.php.txt
Es wurde in der letzten Zeit tatsächlich oft danach gefragt.
Deshalb könnte ein Feature-Artikel daraus entstehen. Ich konnte eben gerade noch keinen entdecken.
Die Files werden mittels Post-Upload hochgeladen.
Die Funktion mime_mail() reagiert auf ein Single-Upload und auf ein Multiple-Upload.
Es fehlen noch:
1. Userverwaltung - damit kein Open Relay entsteht
2. MailAddiCheck - um den Mailserver zu entlasten
3. Mime-Type-Erkennung auf dem Server
4. alle anderen Content-Types in Übersicht mit Beispielen
für die richtige Schachtelung. Ich habe noch einen großen
Bruder für die Funktion, aber der ist mir zu heftig...
5. Fehlerkontrolle durch Euch
6. ausreichende Kommentare, damit erst gar keine Fragen
mehr aufkommen müssen
und nun mein Anliegen:
----------------------
7. Da man ja nicht weiß, wieviele Files versandt werden sollen,
würde ich gerne eine JavasScript-Extention für das Frontend
haben, die automatisch immer ein leeres Input-Element für
Files hinzufügt, wenn man eins belegt hat und auch das
Löschen aus der Liste ermöglicht.
a) Würde sowas inzwischen überhaupt bei den meisten
Browsern funktionieren?
b) Wie muss mans machen? Ich habe da keinen Plan
Grüße
Tom
Moin!
- Da man ja nicht weiß, wieviele Files versandt werden sollen,
würde ich gerne eine JavasScript-Extention für das Frontend
haben, die automatisch immer ein leeres Input-Element für
Files hinzufügt, wenn man eins belegt hat und auch das
Löschen aus der Liste ermöglicht.
Genau an dieser Stelle will ich einmal mein Bedauern kundtun, dass PHP es nicht schafft, die vom Opera-Browser gegebene Möglichkeit des multiplen File-Versands mit _einem_ Dateiauswahlfeld zu unterstützen.
Schade. Dabei ist das Versandformat von Opera für solch eine Multi-Datei logisch: In "multipart/form-data" wird gewöhnlich jede Datei in einem eigenen Part verschickt. Multi-Dateien stecken in _einem_ Part, welcher seinerseits wieder in einzelne Parts unterteilt ist.
Aber was selber basteln, indem man POST_RAW_DATA selbst decodiert? Naja, etwas viel Overkill für den einen Browser, oder...?
- Sven Rautenberg
Hello Sven,
Du auch noch nicht im Bett? Oder hast Du dort B-DSL? ;-))
Genau an dieser Stelle will ich einmal mein Bedauern kundtun, dass PHP es nicht schafft, die vom Opera-Browser gegebene Möglichkeit des multiplen File-Versands mit _einem_ Dateiauswahlfeld zu unterstützen.
Das heißt, dass man beim Operea nicht mehrere Felder benötigt? Wie kommen denn die Daten da an?
Schade. Dabei ist das Versandformat von Opera für solch eine Multi-Datei logisch: In "multipart/form-data" wird gewöhnlich jede Datei in einem eigenen Part verschickt. Multi-Dateien stecken in _einem_ Part, welcher seinerseits wieder in einzelne Parts unterteilt ist.
also mindestens zwei Boundary-Schlüssel und Schachtelung?
Ich hatte daran gedacht, einfach zusätzliche Felder
<input type="file" name="attach[]" ...>
in das DOM einzuklinken. Geht das nicht?
Nur dazu habe ich zu wenig Hintergrundwissen über JavaScript und was da so im Browser "hinten drin" passiert.
Grüße
Tom
Moin!
Du auch noch nicht im Bett? Oder hast Du dort B-DSL? ;-))
Oder so ähnlich... :)
Genau an dieser Stelle will ich einmal mein Bedauern kundtun, dass PHP es nicht schafft, die vom Opera-Browser gegebene Möglichkeit des multiplen File-Versands mit _einem_ Dateiauswahlfeld zu unterstützen.
Das heißt, dass man beim Operea nicht mehrere Felder benötigt? Wie kommen denn die Daten da an?
Aktuell bei PHP: Gar nicht. PHP erkennt das Format nicht (und verhält sich damit möglicherweise ganz böse standardwidrig - allerdings: Da AFAIK kein anderer Browser im Dateidialog, der am Fileinput hängt, Mehrfachauswahl erlaubt, ist das natürlich nur allzu verständlich).
Wie beispielsweise Perl bzw. das CGI.pm dort reagiert, habe ich nicht ausprobiert.
also mindestens zwei Boundary-Schlüssel und Schachtelung?
Genau.
Ich hatte daran gedacht, einfach zusätzliche Felder
<input type="file" name="attach[]" ...>
in das DOM einzuklinken. Geht das nicht?
Klar geht das - mit Javascript eben. Und in Browsern, die nachträgliche Manipulation des DOM-Baumes erlauben und auch anzeigen. Bei Opera 6 (den ich eigentlich nur deswegen benutze, weil er der fortschrittlichste kleinste gemeinsame Nenner aller Browser ist - was damit CSS-mäßig funktioniert, kriegen IE und Mozilla auch hin, sofern man konservativ programmiert) wäre da also das Ende erreicht.
Nur dazu habe ich zu wenig Hintergrundwissen über JavaScript und was da so im Browser "hinten drin" passiert.
Ich würde im Zweifel einfach "das übliche" machen: Entweder eine Auswahlliste/ein Feld angeben lassen, mit dem man die Zahl der File-Felder serverseitig generieren kann - oder mit einem Session-Mechanismus die Dateien nacheinander in einen Bereich laden, aus dem sie dann irgendwann mal verschickt werden.
Ist beides nicht schön, funktioniert aber. :)
- Sven Rautenberg
Hello,
wird ja schon gleich wieder hell...
Aber ich bin hier heute nur am Keuchen und Schniefen. Kann ich einfach nicht schlafen.
Ich würde im Zweifel einfach "das übliche" machen: Entweder eine Auswahlliste/ein Feld angeben lassen, mit dem man die Zahl der File-Felder serverseitig generieren kann - oder mit einem Session-Mechanismus die Dateien nacheinander in einen Bereich laden, aus dem sie dann irgendwann mal verschickt werden.
Ist beides nicht schön, funktioniert aber. :)
So wie 1. machen das die Webinterfaces für Mail, die ich bisher kenne.
2. gefällt mir ganz gut. Man muss ja schließlich auch irgendwo ne Grenze ziehen wegen der Quota von Postfächern. Und über ISDN 20 Files à 1MB hochzuladen, ist auch nicht so prall. Und übliches DSL ist ja auch nur doppelt so schnell.
Ich probier das mal mit DOM, wenn ich das in Self wiederfinde. Mir fällt mur im Moment nicht ein, unter was ich da suchen muss.
Grüße
Tom