diff --git a/include/utils/FileUtils.h b/include/utils/FileUtils.h index c3971e1b..a2c82ad4 100644 --- a/include/utils/FileUtils.h +++ b/include/utils/FileUtils.h @@ -2,7 +2,8 @@ #include "EspFileSystem.h" #include "Global.h" -extern void writeFileUint8(const String& filename, uint8_t*& payload, size_t length, size_t headerLenth); +extern void writeFileUint8tFromBuf(const String& filename, uint8_t*& payload, size_t length, size_t headerLenth, size_t bufSize); +extern void writeFileUint8tByByte(const String& filename, uint8_t*& payload, size_t length, size_t headerLenth); extern File seekFile(const String& filename, size_t position = 0); extern const String writeFile(const String& filename, const String& str); extern const String readFile(const String& filename, size_t max_size); diff --git a/src/StandWebServer.cpp b/src/StandWebServer.cpp index 1547472b..a2c834ca 100644 --- a/src/StandWebServer.cpp +++ b/src/StandWebServer.cpp @@ -226,7 +226,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length) } if (headerStr == "/gifnoc") { - writeFileUint8("config.json", payload, length, headerLenth); + writeFileUint8tFromBuf("config.json", payload, length, headerLenth, 256); } } break; diff --git a/src/utils/FileUtils.cpp b/src/utils/FileUtils.cpp index a5319b5d..8df2a97b 100644 --- a/src/utils/FileUtils.cpp +++ b/src/utils/FileUtils.cpp @@ -1,10 +1,32 @@ #include "Utils/FileUtils.h" -void writeFileUint8(const String& filename, uint8_t*& payload, size_t length, size_t headerLenth) { +//данная функция записывает файл из длинного массива uint8_t через буфер +void writeFileUint8tFromBuf(const String& filename, uint8_t*& big_buf, size_t length, size_t headerLenth, size_t bufSize) { String path = filepath(filename); auto file = FileFS.open(path, "w"); if (!file) { - Serial.println(F("failed write file uint8")); + Serial.println(F("failed write file uint8tFromBuf")); + return; + } + size_t written{headerLenth}; + while (length > written) { + size_t size = length - written; + if (size > bufSize) size = bufSize; + uint8_t* p = &big_buf[written]; + size_t res = file.write(p, size); + if (size != res) { + break; + } + written += res; + } + file.close(); +} + +void writeFileUint8tByByte(const String& filename, uint8_t*& payload, size_t length, size_t headerLenth) { + String path = filepath(filename); + auto file = FileFS.open(path, "w"); + if (!file) { + Serial.println(F("failed write file uint8tByByte")); return; } size_t every = 0;