Klaus1: Upload per Drag&Drop erzeugt leere Datei?

Hallo,

über ein einfaches <input id="upload" name="upload" type="file"> möchte ich eine Datei hochladen. Im Javascript hole ich mir dann das Objekt: var file = document.getElementById("upload").files[0];

Das funktioniert auch prima, wenn der Anwender auf Durchsuchen klickt und die Datei auswählt oder per Drag&Drop auf das Feld zieht.

Nur wenn der Anwender die Datei aus seinem Mailprogramm per Drag&Drop auf das Feld zieht, ist zwar das Objekt auch vorhanden, aber es fehlt die Dateigröße. Alle anderen Informationen wie lastModified, name und type sind aber vorhanden.

Hat jemand eine Idee, woran das liegt und wie ich das hinbekomme, dass der Anwender auch aus seinem Mailprogramm eine Datei hochladen kann, ohne sie vorher speichern zu müssen?

LG Klaus

  1. Hallo Klaus,

    über ein einfaches <input id="upload" name="upload" type="file"> möchte ich eine Datei hochladen. Im Javascript hole ich mir dann das Objekt: var file = document.getElementById("upload").files[0];

    Das funktioniert auch prima, wenn der Anwender auf Durchsuchen klickt und die Datei auswählt oder per Drag&Drop auf das Feld zieht.

    mir war neu, dass man mit Javascript derart auf ein <input type="file"> zugreifen kann, das musste ich selbst erstmal nachlesen. Man lernt ja täglich dazu.

    Nur wenn der Anwender die Datei aus seinem Mailprogramm per Drag&Drop auf das Feld zieht

    Meinst du einen Dateianhang aus einer Mailnachricht?

    ist zwar das Objekt auch vorhanden, aber es fehlt die Dateigröße.
    Alle anderen Informationen wie lastModified, name und type sind aber vorhanden.

    Ich bin überrascht, dass du auf diese Weise überhaupt etwas bekommst. Denn die Datei existiert ja in dem Moment gar nicht als solche, sondern nur als base64-codierte Textwurst im Mail-Quelltext.
    Woher Javascript hier ein lastModified kriegt, ist mir auch schleierhaft, denn diese Information geht bei einem Dateianhang verloren. Die ursprüngliche Dateigröße steht dagegen im Mail-Quelltext zur Verfügung. Wenn überhaupt, dann hätte ich eher erwartet, dass du einen Wert für size bekommst, aber kein gültiges lastModified-Datum.

    Hat jemand eine Idee, woran das liegt und wie ich das hinbekomme, dass der Anwender auch aus seinem Mailprogramm eine Datei hochladen kann, ohne sie vorher speichern zu müssen?

    Ich vermute mal, das ist so nicht möglich - oder wenn, dann ist es sehr stark vom verwendeten Mailclient abhängig.

    Live long and pros healthy,
     Martin

    --
    Hunde, die bellen, beißen nicht.
    Jedenfalls nicht gleichzeitig.
    1. Hallo Martin,

      Nur wenn der Anwender die Datei aus seinem Mailprogramm per Drag&Drop auf das Feld zieht

      Meinst du einen Dateianhang aus einer Mailnachricht?

      Ja genau, ein (echtes, kein Embedded) Attachment aus einer Mailnachricht.

      ist zwar das Objekt auch vorhanden, aber es fehlt die Dateigröße.
      Alle anderen Informationen wie lastModified, name und type sind aber vorhanden.

      Ich bin überrascht, dass du auf diese Weise überhaupt etwas bekommst. Denn die Datei existiert ja in dem Moment gar nicht als solche, sondern nur als base64-codierte Textwurst im Mail-Quelltext.
      Woher Javascript hier ein lastModified kriegt, ist mir auch schleierhaft, denn diese Information geht bei einem Dateianhang verloren. Die ursprüngliche Dateigröße steht dagegen im Mail-Quelltext zur Verfügung. Wenn überhaupt, dann hätte ich eher erwartet, dass du einen Wert für size bekommst, aber kein gültiges lastModified-Datum.

      Ich vermute, dass das Mailprogramm dazu das Attachment aus der Mail in ein Temp-Verzeichnis schreibt. Damit wäre dann wieder ein lastModified vorhanden. Ich verstehe nur nicht, warum alle anderen Informationen, vorallem auch der Typ (z.B. application/pdf) erkannt werden, aber nicht die Größe.

      Bei weiteren Tests ist mir aufgefallen, dass das Rüberziehen der ganzen Mail funktioniert (kommt dann als EML-Datei an). Ich habe es auch mit einer Drag&Drop-Area getestet, um das Input-Element auszuschließen, aber auch hier ist das Verhalten identisch. Lokale Datei per Drag&Drop funktioniert, die ganze Mail auch, das Attachment aber nicht.

      Jetzt muss ich wohl die EML-Datei parsen, die embedded attachments ignorieren und gegebenenfalls noch eine Auswahl einblenden, wenn in der Mail mehrere Attachments vorhanden sind (oder gleich alle hinzufügen). 😟

      LG Klaus

  2. Hallo Klaus1,

    Nur wenn der Anwender die Datei aus seinem Mailprogramm per Drag&Drop auf das Feld zieht

    ?

    Was wird gezogen? Ein Attachment? Eine Mail aus der Inbox?

    Und welches Mailprogramm ist es? Welcher Browser, auf welchem Betriebssystem?

    Es mag ein prinzipielles Problem sein, oder ein Bug im Mailprogramm. Oder im Browser. Oder ein Antivirenprogramm schießt quer - da gibt's buchstäblich Millionen Möglichkeiten.

    Bei mir: Mit Outlook als Mailprogramm funktionieren Anhänge und Mails aus der Inbox wie erwartet.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo Rolf,

      Update: Dateien aus dem Filesystem, die ich auf ein Upload-Feld ziehe, haben ihr richtiges Datum. Objekte aus Outlook (msg oder attachment) haben Date.now().

      Drag+Drop aus Google Mail (Webmailer) heraus geht gar nicht.

      Rolf

      --
      sumpsi - posui - obstruxi