如何在ESP8266 / ESP32上的SPIFFS中“查找和替换”文件中的字符串?

时间:2018-10-04 10:31:01

标签: esp8266 arduino-esp8266 esp32

我在ESP-32上运行了一个小型Web服务器,并且闪存中的HTML文件通过SPIFFS对其进行了访问。我有一些状态字段,希望将其动态插入静态HTML文件中。因此,我定义了一些自定义占位符,例如{data_recv}{data_sent},应将其替换为代码中的字段值,然后由Web服务器提供给客户端浏览器。

当客户端浏览器请求HTML页面之一时,我将使用SPIFFS读取它们,例如:

  if(SPIFFS.exists(path)) {                             // if the file exists
    File file = SPIFFS.open(path, "r");                 // open it

    // TODO: replace placeholders {data_recv} and {data_sent} with field values ...

    size_t sent = server.streamFile(file, contentType); // and send it to the client
    file.close();                                       // then close the file again
    return true;
  }

一些想法如何为File类型实现“查找和替换”功能?

具有以下功能签名的事物:

bool findAndReplace(File file, String searchStr, String replaceStr) {
    // implementation ...
}

1 个答案:

答案 0 :(得分:1)

我的建议是重写文件,而是在回答请求时替换值。

您将使用缓冲区server.streamFile(file, contentType)而不是使用fread(buffer, 1, len, file)来逐块读取文件,而是替换缓冲区中的模式(棘手的部分是您必须跟踪部分匹配项在缓冲区末尾),然后将缓冲区发送给客户端。