HttpUtils_NonblockingGet: Bild hochladen

Begonnen von Dr. Boris Neubert, 20 Februar 2026, 21:54:57

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Hallo,

ich will mit HttpUtils_NonblockingGet ein Bild hochladen. Diesen Beitrag kenne ich.

Auf der Kommandozeile geht es so mit curl:
curl -s -X POST 'http://10.21.2.143/doUpload?dir=%2Fimage%2F' -H 'Content-Type: multipart/form-data'  -F "file=@sensorfeed.jpg;filename=fhem.jpg"
Zurück kommt dann HTML-Kode.

Das ist mein versuchtes Äquivalent in FHEM mit Perl:

    HttpUtils_NonblockingGet({
      loglevel => 1,
      url => $url,
      method => "POST",
      hideurl => 0,
      noshutdown => 1,
      #data => { 'file' => $image, 'filename' => "fhem.jpg" },
      data => $image,
      header => { 'Content-Type' => "multipart/form-data",
      },
      callback => \&push2giftv_callback,
    });

$image enthält das Bild im JPG-Format (Binärdaten, kein Dateiname!).

Die Callback-Funktion meint dazu empty answer received.

curl sendet folgendes:

POST /doUpload?dir=%2Fimage%2F HTTP/1.1
Host: localhost:9999
User-Agent: curl/8.14.1
Accept: */*
Content-Length: 3566
Content-Type: multipart/form-data; boundary=------------------------Lrzt5LS0vsj95Lw7zOnH4L

--------------------------Lrzt5LS0vsj95Lw7zOnH4L
Content-Disposition: form-data; name="file"; filename="fhem.jpg"
Content-Type: image/jpeg

����JFIF``��>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
��C             





▒▒ $.' ",#(7),01444'9=82<.342��C


▒2!!22222222222222222222222222222222222222222222222222���"��

���}!1AQa"q2��#B��R��$3br�
▒▒%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������

���w!1AQaq"2B����       #3R�br�
$4�%�▒▒&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������
                                                                                                                            ?������#ލ�_+[�m-�P�ŭ�\����1$���_��������4M���9�,nV9$(.���c;VU�������魣i�6�]Ć�C�1�
                                                                  ���q�Ws�iP��3Ԟ�W���N��s▒��U�%���aj:]�h�Za�HMɵ�
                                                                                                                �Wd}���P��3�`���EPEPEPEPEPEPEPEPEPEPEPEP����bk�Z���}�Q'��n�v�?*~���ck?�G���S�߷��.s��v
ˢ�7a�����-n�ߴM��6�      ���a�i�7Я�I⏶��>dz�`�Ǜ�'l��>n��\�ѿ�����D�+Awj���!;��0(▒p}j����>��afֶQ�ga$�l�HF2͵F�Sֱ���(��(��(��(��(��(��(��(��(��(��(��(�     ���/�㵴���C�D&���z��n������2J���,��}�5J/3��c|�&rs�8��+��?xe�    ▒I��̗�V�(;#��$�t�
                                                                                        ���X���Z~������1������c�^��5�������|� ~�+��|��It�;G�z�3���<1�\[�4V����"��A,��匝�=�5�Yy���x��9��/���S��ۏ¨x^a$~)�������?=��>T_�FO@(��x<1�\[�4V����"��A,��匝�=�5�<�qq$�i▒�q�s]7��G��Q�l�\}�s��̣�E�d`d�b�0��&�S�M�JR
                 �I"Ɖ���b�ny�A��Nn.�]�#�3��8
                                            �s�ElK)��uq0<����"W���T�"�����v��$��▒L�i��v��/�s���{�����0&)#�dG�]���DZ�g�5+kO����iS�
z1�;���1]Ě}�ƃ��6;��o�����̎��uUpOs������ϊ<Od�y���nn�����$����O `
                                                              du�>��(��(��(��(��(��(��(��(��(֝�]iZ�7��amѹEm��
姘#�癍���*��7Ri�i�.m"��H�����*��w�=Z����.�G Q�^P�7����c��se,6��³i��l_@Y �Z(�▒�ݲ^$,ix�\걮w�▒��:b����c��se,6��³i��l_@Y"rz��Z(���}���m$j��bhQ�|����qڧ��.�k�˪�w��P���I�#▒����+&��}�\j�M�9g����PO�V.<M��ZIm5���BJ�4H��ws���EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU������c�_1�pFp��[x_Ѭ�$��[Q$��-�f1����{.{�▒w������▒�<�:_�7n�6y���o���4��]��-��▒j6�j�o�$E�����@��W;@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@�˛[MN�����������6y�����j���c��Kx-vc��o���|�IRy%[��T��8_��d���TW�[�@-�xu▒�2���`�p0�G'p皥Et�x�Z▒&��\j�
  4��LJ��(9
           #�z�����t�L{�Q�)[�▒����#�T��ukR�.5]F����O;�l
                                                       �`:
�EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV�����bIUcDpK?P~��V!�g�i\�e$�Χ=��c�����k;}�1���6�2�3#3.ᰒ1���[�+���?������Bntԙ�i���=��(����
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
���>b�|:��l<?wqI$!▒���3���T�#y;x,-lMU▒1�k_�/���!�r���k���[�J�9ax�U6�䃜�A\����Đ��b�����]5�G��8Z���+N6�����tQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE��
--------------------------Lrzt5LS0vsj95Lw7zOnH4L--


Und da verließen sie ihn.

Wie kann ich mit HttpUtils ein Bild per Formular wie mit curl hochladen?

Viele Grüße
Boris
FHEM-Developer seit 2007, Mitgründer und Förder-Mitglied des FHEM e.V.
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

passibe, der in diesem Board nicht schreiben darf, hat mich noch darauf gebracht, dass ich zum Vergleich das Ergebnis des HttpUtils_NonBlockingGet() zeigen sollte. Hier ist es:

POST /doUpload?dir=%2Fimage%2F HTTP/1.0
Host: dora.intern.gs21.de:9999
User-Agent: fhem
Accept-Encoding: gzip,deflate
Content-Type: multipart/form-data
Content-Length: 8291

����JFIF``��>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
��C             





▒▒ $.' ",#(7),01444'9=82<.342��C


▒2!!22222222222222222222222222222222222222222222222222�X "��

���}!1AQa"q2��#B��R��$3br�
▒▒%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������

���w!1AQaq"2B����       #3R�br�
$4�%�▒▒&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������
                                                                                                                            ?���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���

Beide Requests habe ich übrigens eingefangen, indem ich nc -l -p 9999 in einem Terminal habe laufen lassen und localhost:9999 als URL angegeben habe.

Man sieht, dass curl einen Multipart-Request schickt und mit dem Bilddaten noch einen eigenen Header mitsendet. Wie bringt man HttpUtils_NonBlockingGet() dazu?
FHEM-Developer seit 2007, Mitgründer und Förder-Mitglied des FHEM e.V.
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

#2
Wenn man "Content-Type: multipart/form-data" haben will, dann muss der Inhalt auch dazu passen.
FHEM hatte bisher keine explizite Unterstuetzung dafuer, ich habe jetzt eine gebastelt, und in HttpUtils.pm hinzugefuegt.

Anwendung:
  my $h = { url=>"http://localhost:8080/upload",
            callback=>sub($$$){ Log 1,"ERR:$_[1] DATA:".length($_[2]) } };
  for my $f ("picture1.png","picture2.png") {
    my $content = `cat $f`;
    HttpUtils_AddMultipartData($h, $content,
      {"content-disposition"=>"form-data; name=\"file\"; filename=\"$f\"", "content-type"=>"image/png"});
  }
  HttpUtils_NonblockingGet($h);

Ich habe es mit einem node.js Beispielprogramm getestet, damit funktioniert es.
Da die Doku (RFC7578+RFC2046) mAn schwer zu lesen ist, bin nicht sicher, ob es ueberall funktioniert, deswegen bitte um Feedback.

rudolfkoenig

Zitatpassibe, der in diesem Board nicht schreiben darf,[...]
Da HttpUtils_NonblockingGet nicht nur von Entwickler verwendet wird, schlage ich vor diesbezuegliche Probleme im Forumsbereich Automatisierung zu diskutieren.