esp-01s передача image

vde69
Offline
Зарегистрирован: 10.01.2016

делаю web сервер, файлы сервера отлажены и залил во флеш

HTML, CSS нормально грузятся, проблема с png 


void out_page_file(WiFiClient* client, char* FileName, char* Content) {
	File f = SPIFFS.open(FileName, "r");
	if (!f) { 
		out_404(client); 
	} else { 
		client->print(F(
		"HTTP/1.1 200 OK\r\n"
		"Cache-Control: max-age=31536000\r\n"
		"Content-Type: "));
		client->print(Content);
		client->print(F(
		"\r\n\r\n"
		"\r\n"));
	
		while (f.available()) { client->write(f.read()); }
		f.close();  
	}
}

Content равен "image/png", вот возвращается заголовокHTTP/1.1 200 OK

HTTP/1.1 200 OK
Cache-Control: max-age=31536000
Content-Type: image/png
Cache-Control: max

нормальный ответ с сервера на котором отлаживал

HTTP/1.1 200 OK
Date: Sun, 21 Mar 2021 18:03:49 GMT
Server: Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.5.24
Last-Modified: Sat, 20 Mar 2021 19:32:17 GMT
ETag: "5c3-5bdfce3f6dba4"
Accept-Ranges: bytes
Content-Length: 1475
Content-Type: image/png

а -age=31536000 Content-Type: image/png

вероятно проблема в отсутствии Content-Length: только я не соображу как его заполнить в моем случае.

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

https://www.arduino.cc/en/Reference/FileSize

Может ещё EOF посылать нужно?

vde69
Offline
Зарегистрирован: 10.01.2016

читаю, можно без длинны если в заголовке использовать

Transfer-Encoding: chunked

а в конце закрывать.

 

но не работает... вообще в браузере ответ такой

data:image/png;base64,

 

то есть он думает, что ему вернули base64 но далее пусто...

vde69
Offline
Зарегистрирован: 10.01.2016

заработало

 

void out_page_file(WiFiClient* client, char* FileName, char* Content) {
    File f = SPIFFS.open(FileName, "r");
    if (!f) {
        out_404(client);
    } else {
        client->print(F(
        "HTTP/1.1 200 OK\r\n"
        "Cache-Control: max-age=31536000\r\n"
        "Content-Type: ")); client->print(Content); client->print(F("\r\n"));
		client->print("Content-Length: ");client->print(f.size(), DEC);client->print("\r\n");
		client->print("\r\n");
        while (f.available()) { client->write(f.read()); }
		client->print("\r\n");
        f.close(); 
    }
}