FHEM Forum

FHEM => Frontends => Thema gestartet von: KyleK am 06 September 2026, 16:46:58

Titel: Bugfix HTTPSRV: Kein Charset für Mediendateien
Beitrag von: KyleK am 06 September 2026, 16:46:58
Hallo,

ich benutze ein TRMNL-Display, und wollte via FHEM + HTTPSRV .png-Dateien für das Display bereitstellen.
Leider wurden die Dateien nie angezeigt.
Ich habe jetzt den Grund gefunden:

HTTPSRV sendet als Content-Type:
Content-Type: image/png; charset=utf-8
Die Browser kommen damit klar, und andere Geräte vielleicht auch, aber TRMNL hat damit ein Problem. Charset ergibt bei Medientypen keinen wirklichen Sinn.

Ich habe meine lokale 02_HTTPSRV.pm angepasst:
--- 02_HTTPSRV.pm.org 2026-09-06 16:44:20.600686186 +0200
+++ 02_HTTPSRV.pm 2026-09-06 16:31:54.459730714 +0200
@@ -174,6 +174,14 @@
     $filename= AttrVal($name,"directoryindex","index.html") unless($filename);
     $filename =~ s/\?.*//;
     my $MIMEtype= filename2MIMEType($filename);
+
+    # Add charset only for text/* or application/json, xml, etc.
+    my $header;
+    if ($MIMEtype =~ m!^(text/|application/(json|xml))!) {
+        $header = "$MIMEtype; charset=utf-8";
+    } else {
+        $header = $MIMEtype;
+    }
     my $directory= $defs{$name}{fhem}{directory};
     $filename= "$directory/$filename";
     #Debug "read filename= $filename";
@@ -182,7 +190,7 @@
       binmode(INPUTFILE);
       @contents= <INPUTFILE>;
       close(INPUTFILE);
-      return("$MIMEtype; charset=utf-8", join("", @contents));
+      return($header, join("", @contents));
     } else {
       return("text/plain; charset=utf-8", "File not found: $filename");
     }

Damit werden die PNGs jetzt auch korrekt auf meinem Display angezeigt.
Titel: Aw: Bugfix HTTPSRV: Kein Charset für Mediendateien
Beitrag von: betateilchen am 06 September 2026, 18:13:13
Es gibt noch jede Menge anderer Content-Types, die das charset u.U. benötigen.

Vielleicht sollte man die Logik umdrehen und für (audio|image|video)/... das charset weglassen.