как заставить этот код работать со spiffs?
esp8266
spiffs
Итак, у меня есть страница, на которой можно выбрать текстовый файл с устройства пользователя и сохранить его на SD-карту:
<!DOCTYPE html>
<html>
<head>
<title>File Upload </title>
</head>
<body>
<h1>File Upload </h1>
<form method='POST' action='/upload' enctype='multipart/form-data'>
<input type='file' name='upload'>
<input type='submit' value='Upload'>
</form>
</body>
</html>
а вот мой код esp8266 для обработки формы:
controlserver.on("/UPL", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/html", upl);
});
controlserver.on("/upload", HTTP_POST, [](AsyncWebServerRequest *request) {
request->send(200); }, handleUpload);
void handleUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
String logmessage = "Client:" + request->client()->remoteIP().toString() + " " + request->url();
if (!index) {
logmessage = "Upload Start: " + String(filename);
request->_tempFile = SD.open("/" + filename, "w");
}
if (len) {
request->_tempFile.write(data, len);
logmessage = "Writing file: " + String(filename) + " index=" + String(index) + " len=" + String(len);
}
if (final) {
logmessage = "Upload Complete: " + String(filename) + ",size: " + String(index + len);
request->_tempFile.close();
request->redirect("/");
}
}
Мой проект небольшой и не требует SD-карты, а esp8266 имеет 4 МБ памяти. Я пытался заменить SD на spiffs, но мне это не удалось. Я не знаю, возможно ли напрямую записать текстовый файл в spiffs, но было бы нормально, если бы я мог сохранить его в строку и записать в файл в spiffs.
@M A K, 👍1
Обсуждение1 ответ
Лучший ответ:
▲ 1
Благодаря этому сообщению я решил проблему.
Вот полный код, Мой html-код страницы загрузки, форма в теге:
<!DOCTYPE html>
<html>
<head>
<title>File Upload Example</title>
</head>
<body>
<h1>File Upload Example</h1>
<form method="POST" action="/upload" enctype="multipart/form-data" target="iframe"><input type="file" name="upload"><input type="submit" value="Upload">
</form>
<iframe style="visibility: hidden;" src="http://" )+local_IPstr+"/Usm" name="iframe"></iframe>
</body>
</html>
код для ESP:
void handleUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final){
if (!index) {
request->_tempFile = SPIFFS.open("/" + filename, "w");
Serial.println("1");
}
if (len) {
request->_tempFile.write(data, len);
Serial.println("2");
}
if (final) {
Serial.println("3");
request->_tempFile.close();
request->redirect("/");
}
}
controlserver.on("/upload", HTTP_POST, [](AsyncWebServerRequest *request) {
request->send(200); }, handleUpload);
controlserver.on("/UPL", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/html", upl);
});
readFile(SPIFFS, "/11.txt"); // show the content of the uploaded file, obviously you should know the name of the uploaded file!
вы можете написать такую функцию, чтобы убедиться, что файл доставлен:
readFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\r\n", path);
File file = fs.open(path, "r");
if(!file || file.isDirectory()){
Serial.println("- empty file or failed to open file");
return String();
}
Serial.println("- read from file:");
String fileContent;
while(file.available()){
fileContent+=String((char)file.read());
}
file.close();
Serial.println(fileContent);
}
,
@M A K
Смотрите также:
- ОТА-программа SPIFFS на ESP8266
- Как записать и прочитать из файла SPIFFS как данные объекта на ESP8266
- Как сохранить структуру в файле?
- Любой способ использовать DMA для передачи данных на SD - карту в ESP8266
- Сбой при обслуживании файлов статической ширины ESP8266WebServer
- Где хранить критические данные в ситуации отключения электроэнергии на ESP8266
- Ошибка сохранения SPIFFS на ESP8266 - только после 3-й записи
- Как динамически реагировать с помощью файлов, содержащих шаблоны?
сократите свой код до записи
"x"
в spiffs и чтения его обратно, @jsotola