Подробное описание кода веб-сервера с загрузкой файлов в SPIFFS для ESP32
Подробное описание кода веб-сервера с загрузкой файлов в SPIFFS для ESP32
Подробное описание кода веб-сервера с загрузкой файлов в SPIFFS для ESP32, #include <Arduino.h>
#include <WiFi.h>
#include <SPIFFS.h>
#include <WebServer.h>
// Настройки Wi-Fi
const char* ssid = "";
const char* password = "";
// Создаем объект WebServer на порту 80
WebServer server(80);
// Функция для получения информации о размере SPIFFS
String getSPIFFSInfo() {
size_t totalBytes = SPIFFS.totalBytes();
size_t usedBytes = SPIFFS.usedBytes();
String output = "<h3>Информация о SPIFFS</h3>";
output += "<p>Общий размер: " + String(totalBytes) + " байт</p>";
output += "<p>Использовано: " + String(usedBytes) + " байт</p>";
output += "<p>Свободно: " + String(totalBytes - usedBytes) + " байт</p>";
return output;
}
// Функция для вывода списка файлов
String listFiles() {
String output = "<ul>";
File root = SPIFFS.open("/");
while (File file = root.openNextFile()) {
output += "<li>" + String(file.name()) + " (" + String(file.size()) + " байт)</li>";
}
output += "</ul>";
return output;
}
// Обработчик главной страницы
void handleRoot() {
String html = "<!DOCTYPE html><html><head><meta charset='utf-8'></head><body>";
html += "<h1>Файлы в SPIFFS</h1>";
html += getSPIFFSInfo();
html += listFiles();
html += "<h2>Загрузка файла</h2>";
html += "<form method='POST' action='/upload' enctype='multipart/form-data'>";
html += "<input type='file' name='file'><input type='submit' value='Загрузить'></form>";
html += "<h2>Форматирование SPIFFS</h2>";
html += "<a href='/format'><button>Форматировать SPIFFS</button></a>";
html += "</body></html>";
server.send(200, "text/html; charset=utf-8", html);
}
// Обработчик загрузки файла
void handleUpload() {
HTTPUpload& upload = server.upload();
static File file;
if (upload.status == UPLOAD_FILE_START) {
String fileName = upload.filename;
Serial.print("Загрузка файла: ");
Serial.println(fileName);
file = SPIFFS.open("/" + fileName, "w"); // Открываем файл для записи
if (!file) {
Serial.println("Ошибка открытия файла для записи");
return;
}
} else if (upload.status == UPLOAD_FILE_WRITE) {
if (file) {
size_t bytesWritten = file.write(upload.buf, upload.currentSize); // Записываем данные в файл
if (bytesWritten != upload.currentSize) {
Serial.println("Ошибка записи файла");
return;
}
}
} else if (upload.status == UPLOAD_FILE_END) {
if (file) {
file.close();
Serial.println("Файл успешно загружен.");
}
server.sendHeader("Location", "/");
server.send(303);
} else {
Serial.println("Ошибка при загрузке файла");
}
}
// Обработчик форматирования SPIFFS
void handleFormat() {
Serial.println("Форматирование SPIFFS...");
if (SPIFFS.format()) {
Serial.println("SPIFFS отформатирован.");
} else {
Serial.println("Ошибка форматирования SPIFFS.");
}
server.sendHeader("Location", "/");
server.send(303);
}
void setup() {
Serial.begin(115200);
if (!SPIFFS.begin(true)) {
Serial.println("Ошибка инициализации SPIFFS!");
return;
}
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Подключение к Wi-Fi...");
}
Serial.println("Подключено к Wi-Fi");
Serial.print("IP-адрес: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.on("/upload", HTTP_POST, [](){ server.send(200); }, handleUpload); // Добавил пустой обработчик для ответа на POST запрос
server.on("/format", handleFormat);
server.begin();
}
void loop() {
server.handleClient();
}
|