FSBrowser mit Cache control (SPIFFS)
- espfly
- Autor
- Offline
- New Member
Weniger
Mehr
- Beiträge: 5
- Dank erhalten: 0
06 Aug 2016 15:01 - 06 Aug 2016 15:25 #30
von espfly
espfly erstellte das Thema FSBrowser mit Cache control (SPIFFS)
Ich habe den
FS Browser
etwas erweitert und ein Cache Control umgesetzt.
Setup:
Überarbeitete handleFileRead:
Erweiterung des FSBrowser für einen einfachen Dateiupload:
Erweiterung zum Dateien auflisten, aufrufen und löschen:
Setup:
// Client Header aufzeichnen (Filterliste)
//here the list of headers to be recorded
const char * headerkeys[] = {"User-Agent", "Cookie", "Etag", "If-None-Match"} ;
size_t headerkeyssize = sizeof(headerkeys) / sizeof(char*);
//ask server to track these headers
server.collectHeaders(headerkeys, headerkeyssize );
Überarbeitete handleFileRead:
bool handleFileRead(String path) {
String Match = "";
DebugMessage("handleFileRead: " + path);
if (path.endsWith("/")) path += "index.htm";
String contentType = getContentType(path);
String pathWithGz = path + ".gz";
// Anfrage Etag vom Client auslesen
if (server.hasHeader("If-None-Match")) {
Match = server.header("If-None-Match");
}
if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) {
if (SPIFFS.exists(pathWithGz)) path += ".gz";
File file = SPIFFS.open(path, "r");
String Etag = String(file.size());
if (Etag == Match)
{ // Datei Etag(Größe) gleich
file.close();
server.sendHeader("Cache-Control", " max-age=20");
server.sendHeader("ETag", Etag);
server.send(304, "text/plain", "");
DebugMessage("no change: " + path);
return true;
} else
{ // Datei Streamen
if (path.endsWith(".png") || path.endsWith(".js") || path.endsWith(".css")) {
server.sendHeader("Cache-Control", " max-age=20");
server.sendHeader("ETag", Etag);
}
DebugMessage(String(millis() / 1000) + " start stream");
size_t sent = server.streamFile(file, contentType);
DebugMessage(String(millis() / 1000) + " finished");
file.close();
DebugMessage(String(millis() / 1000) +" closed: " + path);
return true;
}
}
DebugMessage("finished: " + path);
return false;
}
Erweiterung des FSBrowser für einen einfachen Dateiupload:
void simpleupload(void)
{
String sResponse = "";
sResponse += "<!DOCTYPE html><html lang=\"de\"><head><body>";
sResponse += "<form method='post' action='edit' name='submit' enctype='multipart/form-data'>";
sResponse += "<input type='file' name='fileField'><br /><br />";
sResponse += "<input type='submit' name='submit' value='Submit'>";
sResponse += "</form>";
sResponse += "</body>\r\n";
sResponse += "</html>\r\n";
server.send(200, "text/html", sResponse);
}
Erweiterung zum Dateien auflisten, aufrufen und löschen:
void simplelist(void)
{
String sResponse = "";
sResponse += "<!DOCTYPE html><html lang=\"de\"><head><body>";
sResponse += "<body>\r\n";
char cBuf[100];
Dir dir = SPIFFS.openDir("/");
while (dir.next()) {
String fileName = dir.fileName();
size_t fileSize = dir.fileSize();
sprintf(cBuf, "File: <a href=\"%s\">%s</a>, size: %s\n", fileName.c_str(), fileName.c_str(), formatBytes(fileSize).c_str());
sResponse += cBuf;
sResponse += "<button type=\"button\" onclick=\"delFile('";
sResponse += fileName.c_str();
sResponse += "')\">Delete ";
sResponse += fileName.c_str();
sResponse += "</button>";
sResponse += "<br>\r\n";
}
sResponse += "<script>\r\n";
sResponse += "function delFile(file) {\r\n";
sResponse += "var xhttp = new XMLHttpRequest();\r\n";
sResponse += "var data = new FormData();\r\n";
sResponse += "data.append('file', file);\r\n";
sResponse += "xhttp.open(\"DELETE\", \"edit\", true);\r\n";
sResponse += "xhttp.send(data);\r\n";
sResponse += "}\r\n";
sResponse += "</script>\r\n";
sResponse += "</body>\r\n";
sResponse += "</html>\r\n";
server.send(200, "text/html", sResponse);
}
Letzte Änderung: 06 Aug 2016 15:25 von espfly.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- supporter
- Offline
- Premium Member
Weniger
Mehr
- Beiträge: 135
- Dank erhalten: 12
10 Aug 2016 09:32 #32
von supporter
FSBrowser mit Cache control (SPIFFS)
Haben sich die Probleme der String-Klasse bezüglich der Speicherverwaltung eigentlich schon gelöst?
Ich musste in einigen Arduino-Projekten deshalb bereits auf sprintf etc. ausweichen müssen obwohl die String-Klasse komfortabler ist...
Ich musste in einigen Arduino-Projekten deshalb bereits auf sprintf etc. ausweichen müssen obwohl die String-Klasse komfortabler ist...
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- espfly
- Autor
- Offline
- New Member
Weniger
Mehr
- Beiträge: 5
- Dank erhalten: 0
22 Sep 2016 09:36 #74
von espfly
FSBrowser mit Cache control (SPIFFS)
Ich hatte bis jetzt keine Probleme mit der String-Klasse, obwohl ich diese recht oft verwende.
Welche Probleme gibt es hier?
Welche Probleme gibt es hier?
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- supporter
- Offline
- Premium Member
Weniger
Mehr
- Beiträge: 135
- Dank erhalten: 12
22 Sep 2016 14:14 #75
von supporter
FSBrowser mit Cache control (SPIFFS)
Hallo espfly,
der RAM-Speicher wurde mit der Zeit weggelutscht. Jedes Mal wenn sich der String verlängert hat, wurde auf dem µC neuner Platz dafür reserviert und der alte Speicherplat nicht wieder freigegeben. Beim Arduino trat das Problem Aufgrund des wenigen Speicherplatzes recht schnell auf und der Controller hing.
der RAM-Speicher wurde mit der Zeit weggelutscht. Jedes Mal wenn sich der String verlängert hat, wurde auf dem µC neuner Platz dafür reserviert und der alte Speicherplat nicht wieder freigegeben. Beim Arduino trat das Problem Aufgrund des wenigen Speicherplatzes recht schnell auf und der Controller hing.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- espfly
- Autor
- Offline
- New Member
Weniger
Mehr
- Beiträge: 5
- Dank erhalten: 0
22 Sep 2016 14:30 #76
von espfly
FSBrowser mit Cache control (SPIFFS)
Das Problem hatte ich nie, obwohl ich viel mit Strings mache.
Mit Arduino habe ich nie Strings verwendet, nur char Arrays.
Vielleicht wurde der ESP unsauber programmiert?
Mit Arduino habe ich nie Strings verwendet, nur char Arrays.
Vielleicht wurde der ESP unsauber programmiert?
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- supporter
- Offline
- Premium Member
Weniger
Mehr
- Beiträge: 135
- Dank erhalten: 12
27 Sep 2016 12:19 #89
von supporter
FSBrowser mit Cache control (SPIFFS)
Hallo espfly,
das Thema ist evtl. für alle doch interessanter als es auf den ersten Blick scheint.
Die String-Klasse ist nicht ESP-spezifisch sondern Bestandteil der Arduino-IDE.
Selbst dort ist es auch nur ein durch C++ geerbtes Problem.
Allgemeine Beschreibung der String-Klasse
Arduino-Forum Problembeschreibung 1
Arduino-Forum Problembeschreibung 2
Arduino-Forum Problembeschreibung 3
das Thema ist evtl. für alle doch interessanter als es auf den ersten Blick scheint.
Die String-Klasse ist nicht ESP-spezifisch sondern Bestandteil der Arduino-IDE.
Selbst dort ist es auch nur ein durch C++ geerbtes Problem.
Allgemeine Beschreibung der String-Klasse
Arduino-Forum Problembeschreibung 1
Arduino-Forum Problembeschreibung 2
Arduino-Forum Problembeschreibung 3
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Aktuelle Seite:
- Startseite
- Impressum / Datenschutz / ...
- Projektprobleme
- Kommunikation
- FSBrowser mit Cache control (SPIFFS)