Передача больших файлов по Wi-FI

Пользователю нужно передать библиотеку JS весом 300 КБ.
Библиотека лежит на карте SD.
Передаю так:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

#include <SD.h>

const char* _SSID = "";            
const char* PASSWORD = "";

byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(192,168,0,35);
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);

ESP8266WebServer server(80);

void setup(void) {
Serial.begin(115200);

if(!SD.begin(3)){
    Serial.println("Card Mount Failed");
    return;
  }

 WiFi.begin(_SSID, PASSWORD);
 WiFi.config(ip, gateway, subnet);

  while (WiFi.status() != WL_CONNECTED) {
    delay(10);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(_SSID);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  WiFi.softAP(_SSID, PASSWORD);
  IPAddress IP = WiFi.softAPIP(); 

  Serial.println(IP);

  server.on("/", [](){
    server.send(200, "text/html; charset=utf-8", "Привет Мир!");
  });
  server.on("/js/Data.js", [](){
    server.send(200, "application/javascript; charset=utf-8", GetFile("/js/Data.js"));
  });
 server.begin();
}

String GetFile(String NAME)
{
  String RETURN;
  if (SD.exists(NAME))
  {
    fs::File  FILE = SD.open(NAME);
    if (FILE) {
      while (FILE.available()) {
        RETURN += FILE.readStringUntil('\n');
      }    
    }
    FILE.close();
  }
  return RETURN;
}

void loop() {
  server.handleClient();
}

При файле весом менее 50КБ всё работает отлично, но если размер файла превышает 50КБ то ESP32 уходит в перезапуск, на иностранных форумах нашёл информацию, что ESP32 не может передавать файлы выше 50КБ из-за ограничений с памятью.

Подскажите как решить данную проблему и передать пользователю файл размером в 300КБ?

разместить файл на стороннем ресурсе к примеру

вы чего-то не поняли.

передать файл частями по 50к?

Нtудивительно:

Организую на ESP32 FTP сервер, где SD флешка выступает как диск сервера. Боьше 100 кб, правда, файлы не качал и не записывал, не было необходимости.

Это не так. Она-то может, это программисты, вроде Вас и того, кто это писал, не могут. Видимо, из-за ограничений с чем-нибудь.

Вот скажите мне, на кой йух Вы читаете файл с SD целиком в память, а только потом передаёте? А если он будет не 300к, а 300G? Кто мешает передавать его по мере чтения побайтово?

Так я и создал тему, что бы спросить совета, через что нужно реализовать передачу, в обход внутренней памяти, а не для того что бы слушать пуки в лужу от чуваков, который просто оскорбляет всех на форуме, за три темы, что я создал, ни одного дельного совета не услышал, кроме оскорблений.

FTP сервер не вариант, так как отдаю файл на web-страницу.

Ну ок, я и так понимаю, что данный метод мне не подходит, а что посоветуете использовать?

Не вариант, нужно передать данные целым файлом.

Это крайний вариант, к которому я не хотел бы прибегать.

похоже для вас это вообще “не вариант” , вы ответов не понимаете, только обижаетесь попусту
Передать файл по частям не значит передать несколько файлов

Нет, я от всяких даунов должен выслушивать оскорбления, которые ни могут дать ни одного внятного ответа?

Похоже давать советы на этом форуме “Это не ваше”, удалите аккаунты на этом форуме.

Как минимум - определиться с контроллером: ESP8266 или ESP32

сегодня вроде день семьи, а кругом обиженные мальчики.

Вы меня имеет в виду? Впрочем, неважно, я отвечу за всех.

Если что , я дал Вам абсолютно внятный ответ, который полностью решает проблему (и кстати именно так серьёзные серверы передают гига- и терабайтовый файлы):

Если Вы Вы не поняли этого ответа (из-за ограничений с чем-нибудь), то тогда да, Вы правы, мы - дауны, ибо только дауны могут пытаться что-то серьёзно писать человеку, не умеющему читать и понимать прочитанное.

И, да, ещё

Да, должны! Не хотите выслушивать ответы - не задавайте вопросы. Вас никто за язык не тянул, сами задали.

Они просто хотели, чтобы их любили.


…ну в хорошем смысле, я думаю? :rofl:

1 лайк

Ну по существу вопроса всёш ннада ответить, нет?


  1. ТС, у тебя плата ЕСП32 в вопросе, а в коде написано включение библиотек от ЕСП8266, это оттого, что ты идиот, или случайно вышло?
  2. Допустим речь про ЕСП32 и его встроенный веб-сервер, построенный на АсинкВебСервер.
  3. Он НЕ СОДЕРЖИТ готового метода для отправки большого файла с СД карты или ЛитлФС или любой ФС. Можно долго писать - почему так вышло, кто в этом виноват и как его наказать, но такого метода там нет.
  4. Но есть и хорошие новости!!! Эта библиотека имеет таки метод для отправки клиенту большого файла, сколь угодно большого, но из прогмема (для есп32 это просто флеш) а не из файловой системы. То есть JS файл нужно написать как PGM константу внутри какого-нибудь .h - файла. И спокойно её отправлять.
  5. Чем качать отсутствующие права на форумах - нужно учиццо+учиццо и еще раз учиццо!

  1. Как-то я забыл написать еще одну, совершенно фантастическую альтернативу. Можно создать свой класс веб сервера, унаследовав его от штатного, и там добавить метод для отправки большого файла прям из файловой системы. Памятник из ценного металла на родине героя и любовь шир-нар-масс обеспечены! Цветы, девушки и все эти вещи!

Спасибо за ответ на вопрос.

Но вот от подачи нимб не жмёт?

1 лайк

Спасибо за заботу! Нормально, я “на вырост” брал, с запасом.

1 лайк