代码
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
#include <FS.h>
ESP8266WiFiMulti wifiMulti;
ESP8266WebServer esp8266_server(80);
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN,OUTPUT);
wifiMulti.addAP("mark2", "xxx");
Serial.println("Connecting ...");
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.print(i++); Serial.print(' ');
}
Serial.println('\n');
Serial.print("Connected to ");
Serial.println(WiFi.SSID());
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
if(SPIFFS.begin()){
Serial.println("SPIFFS Started.");
} else {
Serial.println("SPIFFS Failed to Start.");
}
esp8266_server.on("/led",ledFunc);
esp8266_server.onNotFound(handleUserRequet);
esp8266_server.begin();
Serial.println("HTTP server started");
}
void loop(void) {
esp8266_server.handleClient();
}
void handleUserRequet() {
String webAddress = esp8266_server.uri();
bool fileReadOK = handleFileRead(webAddress);
if (!fileReadOK){
esp8266_server.send(404, "text/plain", "404 Not Found");
}
}
bool handleFileRead(String path) {
if (path.endsWith("/")) {
path = "/index.html";
}
Serial.println(path+"是否存在:"+SPIFFS.exists(path));
String contentType = getContentType(path);
if (SPIFFS.exists(path)) {
File file = SPIFFS.open(path, "r");
esp8266_server.streamFile(file, contentType);
file.close();
return true;
}
return false;
}
String getContentType(String filename){
if(filename.endsWith(".htm")) return "text/html";
else if(filename.endsWith(".html")) return "text/html";
else if(filename.endsWith(".css")) return "text/css";
else if(filename.endsWith(".js")) return "application/javascript";
else if(filename.endsWith(".png")) return "image/png";
else if(filename.endsWith(".gif")) return "image/gif";
else if(filename.endsWith(".jpg")) return "image/jpeg";
else if(filename.endsWith(".ico")) return "image/x-icon";
else if(filename.endsWith(".xml")) return "text/xml";
else if(filename.endsWith(".pdf")) return "application/x-pdf";
else if(filename.endsWith(".zip")) return "application/x-zip";
else if(filename.endsWith(".gz")) return "application/x-gzip";
return "text/plain";
}
void ledFunc(){
digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));
Serial.println("");
String folder="/";
Dir dir = SPIFFS.openDir(folder);
while (dir.next()) {
Serial.println("根目录下的文件有:"+dir.fileName());
}
esp8266_server.sendHeader("Refresh","2;URL=/");
esp8266_server.send(303);
}
注意点
- 无论是使用串口调试打印、还是控制led小灯操作闪存文件系统都要进行打开操作。
Serial.begin(115200);
pinMode(LED_BUILTIN,OUTPUT);
SPIFFS.begin();
esp8266_server.streamFile(file, contentType);
esp8266_server.sendHeader("Refresh","2;URL=/");
esp8266_server.send(303);
- 通过插件上传的文件都在根目录下,data即可以理解为根目录

