首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ESP32上向异步web服务器上的captive门户添加多个SPIFFS文件

在ESP32上向异步web服务器上的captive门户添加多个SPIFFS文件
EN

Stack Overflow用户
提问于 2020-08-25 21:52:11
回答 1查看 2.7K关注 0票数 0

我使用了修改后的Captive门户和异步web门户的简单代码(来自ESPAsyncWebServer库- https://github.com/me-no-dev/ESPAsyncWebServer)。它从SPIFFS闪存发送html页面。

它现在的工作方式是在任何连接上发送index.html。我刚刚修改了前面提到的发送hmtl代码的一行代码。我想要存档的是能够发送更多的文件,如html文件和图像。

这是我的密码:

代码语言:javascript
复制
#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();
}

我试着添加

代码语言:javascript
复制
  server.on("/image1", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/image1.jpg", "image/jpg"); // this part has been modified
  });

在安装部分中,如这里所解释的- https://randomnerdtutorials.com/display-images-esp32-esp8266-web-server/

但这不管用。我试过在一些地方乱搞改变路径的"/“,但没有运气。而且,如果我改变了

代码语言:javascript
复制
void handleRequest(AsyncWebServerRequest *request) {
  request->send(SPIFFS, "/index.html", String(), false);
}

代码语言:javascript
复制
void handleRequest(AsyncWebServerRequest *request) {
  request->send(SPIFFS, "/image1.jpg", "image/jpg");
}

当登录到AP时,我会得到图片而不是网站,所以我认为路径是好的。

要添加更多信息,这是我的网页代码:

代码语言:javascript
复制
<!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>

它在非captive_portal解决方案上运行良好(正如前面提到的教程中所解释的那样)。

因此,我的问题是,如何不仅在异步get服务器中的captive门户上加载单个文件,而且加载更复杂(仍然非常简单)的网页?

EN

回答 1

Stack Overflow用户

发布于 2020-11-10 09:29:42

我与它斗争了一段时间。但答案是这样的。在CaptiveRequestHandler() {} 上,您可以放置http调用.

下面是一个给你的例子:

代码语言:javascript
复制
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);
    }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63587623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档