如何解决将多个SPIFFS文件添加到ESP32上的异步Web服务器上的强制门户
我正在使用带有异步Web门户(来自ESPAsyncWebServer库-https://github.com/me-no-dev/ESPAsyncWebServer)的经过修改的Captive门户的简单代码。它从SPIFFS闪存发送html页面。
它现在的工作方式是在任何连接上发送index.html。我刚刚修改了在提到的示例中发送hmtl代码的一行。我想存档的是能够发送更多文件,例如html文件和图像。
这是我的代码:
#include <DNSServer.h>
#include <WiFi.h>
#include <AsyncTCP.h>
#include "ESPAsyncWebServer.h"
#include <SPIFFS.h>
DNSServer dnsServer;
AsyncWebServer server(80);
class CaptiveRequestHandler : public AsyncWebHandler {
public:
CaptiveRequestHandler() {}
virtual ~CaptiveRequestHandler() {}
bool canHandle(AsyncWebServerRequest *request) {
//request->addInterestingHeader("ANY");
return true;
}
void handleRequest(AsyncWebServerRequest *request) {
request->send(SPIFFS,"/index.html",String(),false);
}
};
void setup() {
Serial.begin(115200);
if (!SPIFFS.begin()) {
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
WiFi.softAP("esp-captive");
dnsServer.start(53,"*",WiFi.softAPIP());
server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER);//only when requested from AP
server.on("/image1",HTTP_GET,[](AsyncWebServerRequest * request) {
request->send(SPIFFS,"/image1.jpg","image/jpg"); // this part has been modified
});
server.begin();
}
void loop() {
dnsServer.processNextRequest();
}
我尝试添加
server.on("/image1","image/jpg"); // this part has been modified
});
在设置部分(如此处所述-https://randomnerdtutorials.com/display-images-esp32-esp8266-web-server/
但是它不起作用。我试图弄乱路径更改“ /”的出现位置,但是没有运气。而且,如果我改变了
void handleRequest(AsyncWebServerRequest *request) {
request->send(SPIFFS,false);
}
到
void handleRequest(AsyncWebServerRequest *request) {
request->send(SPIFFS,"image/jpg");
}
<!DOCTYPE html>
<html style="height: 100%">
<head>
<Meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body style="background-image: url('image1'); background-size: contain; background-color: black; background-repeat: no-repeat; background-position: 50% 0%; height=100%">
<h1 style="color:white">ESP32</h1>
</body>
</html>
,并且在非强制性门户解决方案上运行良好(如先前提到的教程中所述)。
所以我的问题是,如何不仅可以在异步Web服务器的强制门户中加载单个文件,还可以加载更复杂(仍然非常简单)的网页?
解决方法
我为此挣扎了一段时间。但这是答案。在CaptiveRequestHandler() {}
上,您可以发起http呼叫。
以下是您的示例:
class CaptiveRequestHandler : public AsyncWebHandler {
public:
CaptiveRequestHandler() {
/* THIS IS WHERE YOU CAN PLACE THE CALLS */
server.onNotFound([](AsyncWebServerRequest *request){
AsyncWebServerResponse* response = request->beginResponse(SPIFFS,"/NotFound.html","text/html");
request->send(response);
});
server.on("/Bootstrap.min.css",HTTP_GET,[](AsyncWebServerRequest *request) {
AsyncWebServerResponse* response = request->beginResponse(SPIFFS,"/Bootstrap.min.css","text/css");
request->send(response);
});
}
virtual ~CaptiveRequestHandler() {}
bool canHandle(AsyncWebServerRequest *request) {
//request->addInterestingHeader("ANY");
return true;
}
void handleRequest(AsyncWebServerRequest *request) {
request->send(SPIFFS,"/index.html",String(),false);
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。