• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

SD WEB SERVER и название файлов на флешке

Tirarex

New member
И так, залил я сэмпл SD веб сервера, подключил флешку на 4гб (отформатированную в FAT и предварительно пополненную контентом)

Вызвал список файлов командой "http://192.168.0.50/list?dir=/"
и получил такой список
[{"type":"dir","name":"SYSTEM~1"},{"type":"dir","name":"FILES"},{"type":"file","name":"ARDU~1.HTM"},{"type":"file","name":"CONTEN~1.HTM"},{"type":"file","name":"GAME~1.HTM"},{"type":"file","name":"XORS~1.HTM"}]

Вроде все файлы на месте но есть один минус, вместо названия "xors.html" , я получаю файлы с названиями "XORS~1.HTM"
Куда уходит последняя буква в HTML и откуда берется ~1, для меня загадка.
Возможно кто то приоткроет эту тайну ?

Все что изменил в коде сэмпла - добавил пару строк
else if(path.endsWith(".HTM")) dataType = "text/html";
else if(path.endsWith(".html")) dataType = "text/html";


p.s. А еще многие сэмплы предлагают заходить на "http://esp8266sd.local"
который не открывается.


 

Tirarex

New member
@pvvx
Как я понимаю, это делается в браузере ?

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

Юрий Ботов

Moderator
Команда форума
Вопрос видимо в FAT. Для длинных имен наверно все таки надо FAT32. В FAT длинные имена хранятся именно в таком виде. Спасибо передавайте дедушке Биллу.
 

pvvx

Активный участник сообщества
Вопрос видимо в FAT. Для длинных имен наверно все таки надо FAT32. В FAT длинные имена хранятся именно в таком виде. Спасибо передавайте дедушке Биллу.
Это не зависит от типа FAT. Длинные имена ввели позже и они вписываются в другом формате и месте... При распечатке надо указать какие выводить.
Сделано это для совместимости с древним оборудованием до выхода нового формата FAT, а не Биллом. :)
Ответить точнее нет возможности - автор темы не указал, какие либы он использует.
 

Tirarex

New member
@Юрий Ботов
Форматировал флешку в Fat32 (Ранее была в Fat тк ардуина не умела в другие форматы, думал с есп так же), проблемы с листом файлов пропали!
Cпасибо !

[{"type":"dir","name":"SYSTEM~1"},{"type":"file","name":"FAVICON.ICO"},{"type":"file","name":"GAME.HTM"},{"type":"file","name":"INDEX.HTM"},{"type":"file","name":"LOGIN.HTM"},{"type":"file","name":"ROBOTS.TXT"},{"type":"file","name":"XORS.HTM"},{"type":"dir","name":"FILES"},{"type":"file","name":"ARDU.HTM"}]
 

Tirarex

New member
Это не зависит от типа FAT. Длинные имена ввели позже и они вписываются в другом формате и месте... При распечатке надо указать какие выводить.
Сделано это для совместимости с древним оборудованием до выхода нового формата FAT, а не Биллом. :)
Ответить точнее нет возможности - автор темы не указал, какие либы он использует.
Проблема вернулась при использовании папок =D
Код:
[{"type":"file","name":"COMMAN~1.HTM"},{"type":"file","name":"COMMAN~2.HTM"},{"type":"file","name":"COMMAN~3.HTM"},{"type":"file","name":"COMMAN~4.HTM"},{"type":"file","name":"CO6275~1.HTM"},{"type":"file","name":"CO72D8~1.HTM"},
Код как и говорил ранее - сэмпл SDWEB SERVER

Подключенные библиотеки
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <SPI.h>
#include <SD.h>
 

Юрий Ботов

Moderator
Команда форума
The library supports FAT16 formatted SD cards up to 2GB in size. 4GB FAT16 formatted SD cards might work, but is untested. Long filenames are not supported. Keep your filenames compliant with the old 8.3 standard. The SD card should be connected to the SPI-pins on your Arduino. Pin connections are available in the documentation in the download.
NOTE: This library worked well with a 1GB SD card that was formatted FAT16. This library will NOT work with larger cards that are formatted FAT32.
 

Юрий Ботов

Moderator
Команда форума
А если серьезно: какая ИМЕННО библиотека используется? Какая ИМЕННО карточка используется. Длинные имена файлов ТОЧНО НУЖНЫ?
 

Tirarex

New member
А если серьезно: какая ИМЕННО библиотека используется? Какая ИМЕННО карточка используется. Длинные имена файлов ТОЧНО НУЖНЫ?
Библиотека - трудно сказать ибо отдельно я их не ставил, а это значит что она шла дефолтно в поставке с esp8266 sdk / arduino ide.

Флешка Noname MicroSD HC 6Class 4GB, форматирована в FAT32 (свободно 3,9гб с мелочью).

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

Как я понимаю, нужно искать другую либу ?
 

Юрий Ботов

Moderator
Команда форума
Библиотека построена не на реальный fat а на усеченный. Исходя из описания библиотеки она поддерживает карточки до 2 Гб на fat16 или до 1 Гб на fat32. И никому не обязана работать с карточками большего размера. Также и длинные имена она толком не поддерживает. Поэтому самый простой способ: взять карточку поменьше и переименовать файлы в 8.3 (8 букв имя, точка, 3 буквы расширение). Ну или если лениво - то искать/переписывать библиотеку.
 

Tirarex

New member
Библиотека построена не на реальный fat а на усеченный. Исходя из описания библиотеки она поддерживает карточки до 2 Гб на fat16 или до 1 Гб на fat32. И никому не обязана работать с карточками большего размера. Также и длинные имена она толком не поддерживает. Поэтому самый простой способ: взять карточку поменьше и переименовать файлы в 8.3 (8 букв имя, точка, 3 буквы расширение). Ну или если лениво - то искать/переписывать библиотеку.
Спасибо за ответ, значит буду менять названия файлов, а так вроде с fat32 проблем нет, файлы работают.
 

pet

Member
подскажите плиз! на флэшке страница на бутстрапе + js+ jqwery ну и прочие прибамбасы-всё разложено по полочкам, ESP SoftAP mode, при загрузке индексовой страницы приходит запрос на фаил ресурса, и видимо стэк переполняет (уходит в софтВДТ), пишу под ардуино ide/ платка nodeMCU с ESP 12f модулем на борту!
НЕПОНИМАЮ как можно обойти ограничения??? И можно ли???
 

Tirarex

New member
подскажите плиз! на флэшке страница на бутстрапе + js+ jqwery ну и прочие прибамбасы-всё разложено по полочкам, ESP SoftAP mode, при загрузке индексовой страницы приходит запрос на фаил ресурса, и видимо стэк переполняет (уходит в софтВДТ), пишу под ардуино ide/ платка nodeMCU с ESP 12f модулем на борту!
НЕПОНИМАЮ как можно обойти ограничения??? И можно ли???
Для Бутстрапа используй js+css из паблик cdn и проблем не будет, у меня жирная страница выдается нормально Tirarex's site
 

pet

Member
Для Бутстрапа используй js+css из паблик cdn и проблем не будет
я не совсем понял что вы имели ввиду? пилить всё в один фаил??
так я использую библиотеку Bootstrap, там и стили и скрипты прописаны. проблема возникла с подгрузкой файлов.
библиотека весит больше 500кб и на ней модуль не вывозит и уходит в ребут, выкидывая при этом стэк в консоль.

подскажите люди добрые, как такое с флэшки клиенту отослать????
может там ограничения по размеру есть? или по времени загрузки? и может ли эту проблему решить udp сервер??
 

pet

Member
Tirarex, так как вы с файлами разобрались? или не разобрались???
я в похожей ветке нашёл вырезку из библиотеки
Код:
#define    _USE_LFN    0        /* 0 to 3 */
#define    _MAX_LFN    255        /* Maximum LFN length to handle (12 to 255) */
/* The _USE_LFN option switches the LFN feature.
/
/   0: Disable LFN feature. _MAX_LFN has no effect.
/   1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
/   2: Enable LFN with dynamic working buffer on the STACK.
/   3: Enable LFN with dynamic working buffer on the HEAP.
/
/  When enable LFN feature, Unicode handling functions ff_convert() and ff_wtoupper()
/  function must be added to the project.
/  The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. When use stack for the
/  working buffer, take care on stack overflow. When use heap memory for the working
/  buffer, memory management functions, ff_memalloc() and ff_memfree(), must be added
/  to the project. */
 

Юрий Ботов

Moderator
Команда форума
Вам предложили уже: пусть клиент забирает бутстрап не у вас а снаружи...
HTML:
...
<html>
<head>
<link href=" https://yastatic.net/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
<script src=" https://yastatic.net/bootstrap/3.3.6/js/bootstrap.min.js"></script>
...
</head>
<body>
...
</body>
</html>
 
Сверху Снизу