ace-on-esp-local

ace files without cdn

ace.js embeded to edit.html.gz and renamed long theme name to duru


Different browsers response are not same for listing directories. Mac -> chrome and firefox are ok but safari may delay or not show dir list. If dir list is empty you can use Show Directory button.


You may need reload page 3-4 times to finish caching.

http://192.168.4.1/edit

orginal code from here https://github.com/me-no-dev/ESPAsyncWebServer

if you dont want to edit json files ignore json plugin files...

you can serve edit.html.gz file and use with ;



class SPIFFSEditor: public AsyncWebHandler {
  private:
    String _username = httpAuth.wwwUsername.c_str();
    String _password = httpAuth.wwwPassword.c_str();
    bool _authenticated;
    uint32_t _startTime;
  public:
    bool bak;
    SPIFFSEditor(String username = String(), String password = String()): _username(username), _password(password), _authenticated(false), _startTime(0) {}
    bool canHandle(AsyncWebServerRequest *request) {
      if (request->method() == HTTP_GET && request->url() == "/edit")
        return true;
      else if (request->method() == HTTP_GET && request->url() == "/list")
        return true;
      else if (request->method() == HTTP_GET && !(request->url().endsWith("/")) && request->hasParam("download"))
        return true;
      else if (request->method() == HTTP_POST && request->url() == "/edit")
        return true;
      else if (request->method() == HTTP_DELETE && request->url() == "/edit")
        return true;
      else if (request->method() == HTTP_PUT && request->url() == "/edit")
        return true;

      return false;
    }


    void handleRequest(AsyncWebServerRequest *request) {

      if (_username.length() && _password.length() && !request->authenticate(_username.c_str(), _password.c_str()))
        return request->requestAuthentication();
      if (request->method() == HTTP_GET && request->url() == "/list") {
        if (request->hasParam("dir")) {
          String path = request->getParam("dir")->value();
          Dir dir = SPIFFS.openDir(path);
          path = String();
          String output = "[";
          while (dir.next()) {
            fs::File entry = dir.openFile("r");
            if (output != "[") output += ',';
            bool isDir = false;
            output += "{\"type\":\"";
            output += (isDir) ? "dir" : "file";
            output += "\",\"name\":\"";
            output += String(entry.name()).substring(1);
            output += "\"}";
            entry.close();
          }
          output += "]";
          request->send(200, "text/json", output);
          output = String();
        }

      }
      else  if (request->method() == HTTP_GET && request->url() == "/edit") {


        request->send(SPIFFS, "/edit.html");

      }
      else if (request->method() == HTTP_GET) {
        request->send(SPIFFS, request->url(), String(), true);
      } else if (request->method() == HTTP_DELETE) {
        if (request->hasParam("path", true)) {
          SPIFFS.remove(request->getParam("path", true)->value());
          request->send(200, "", "DELETE: " + request->getParam("path", true)->value());
        } else
          request->send(404);
      } else if (request->method() == HTTP_POST) {
        if (request->hasParam("data", true, true) && SPIFFS.exists(request->getParam("data", true, true)->value()))
          request->send(200, "", "UPLOADED: " + request->getParam("data", true, true)->value());
        else
          request->send(500);
      } else if (request->method() == HTTP_PUT) {
        if (request->hasParam("path", true)) {
          String filename = request->getParam("path", true)->value();
          if (SPIFFS.exists(filename)) {
            request->send(200);
          } else {
            fs::File f = SPIFFS.open(filename, "w");
            if (f) {
              f.write((uint8_t)0x00);
              f.close();
              request->send(200, "", "CREATE: " + filename);
            } else {
              request->send(500);
            }
          }
        } else
          request->send(400);
      }
    }

    void handleUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
      if (!index) {
        if (!_username.length() || request->authenticate(_username.c_str(), _password.c_str())) {
          _authenticated = true;
          request->_tempFile = SPIFFS.open(filename, "w");
          _startTime = millis();
        }
      }
      if (_authenticated && request->_tempFile) {
        if (len) {
          request->_tempFile.write(data, len);
        }
        if (final) {
          request->_tempFile.close();
          uint32_t uploadTime = millis() - _startTime;
          os_printf("upload: %s, %u B, %u ms\n", filename.c_str(), index + len, uploadTime);
          String yuklendi = "Dosya yüklendi: " + filename + ", " + (index + len) / 1000 + " KB, " + uploadTime / 1000 + " saniye";
          ws.textAll(yuklendi);

        }
      }
    }


};