Как «найти и заменить» строки в файле из SPIFFS на ESP8266 / ESP32? - PullRequest
0 голосов
/ 04 октября 2018

Я использую небольшой веб-сервер на ESP-32, и файлы HTML на флэш-памяти обращаются к нему через SPIFFS.У меня есть несколько полей состояния, которые я хотел бы динамически вставить в статические HTML-файлы.Поэтому я определил некоторые пользовательские заполнители, такие как {data_recv} и {data_sent}, которые должны быть заменены значениями полей из кода и затем обслуживаться веб-сервером в браузере клиента.

Когда браузер клиента запрашивает один из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 голосов
/ 08 октября 2018

Мое предложение будет не для перезаписи файлов, а для замены значений при ответе на запросы.

Вместо использования server.streamFile(file, contentType) вы бы использовали буфер для чтения блока файлаВ противном случае, используя fread(buffer, 1, len, file), замените шаблон в буфере (хитрая часть в том, что вам нужно отслеживать частичные совпадения в конце буфера) и отправьте буфер клиенту.

...