Coder Social home page Coder Social logo

esp-ftp-server-lib's People

Contributors

akoro avatar joe91 avatar peterus avatar slaesh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

esp-ftp-server-lib's Issues

Can't open directory /

I use a ESP32-Wroom-32D custom board and I'm unable to connect to the FTP service because the directory "/" is not found. This confuses the FTP client and it disconnects (Cyberduck 7.10.2)

FS& gfs = LITTLEFS;

setup() {
...
ftp.addUser("admin", "admin");
ftp.addFilesystem("FS", &gfs);
ftp.begin();
}

loop() {
ftp.handle();
...
}

Also the windows command line tool can't open the root directory (so it seems not a client issue). Other directories work:
C:>ftp -d 192.168.178.118
Verbindung mit 192.168.178.118 wurde hergestellt.
220--- Welcome to FTP Server for ESP32 ---
220--- By Peter Buchegger ---
220 -- Version 0.1 ---
---> OPTS UTF8 ON
500 not implemented
Benutzer (192.168.178.118:(none)): admin
---> USER admin
331 OK. Password required
Kennwort:
---> PASS admin
230 OK.
ftp> LS
---> PORT 192,168,178,23,237,13
200 PORT command successful
---> LIST
150 Accepted data connection
550 Can't open directory /
ftp> CD /
---> CWD /
550 Directory does not exist
ftp> LS
---> PORT 192,168,178,23,237,23
200 PORT command successful
---> LIST
150 Accepted data connection
550 Can't open directory /
ftp> CD FS
---> CWD FS
250 Ok. Current directory is /FS
ftp> LS
---> PORT 192,168,178,23,237,33
200 PORT command successful
---> LIST
150 Accepted data connection
-rw-r--r-- 1 owner group 15 Jan 01 1970 .exclude.files
-rw-r--r-- 1 owner group 384 Jan 01 1970 config.json
drwxr-xr-x 1 owner group 0 Jan 01 1970 i18n
drwxr-xr-x 1 owner group 0 Jan 01 1970 www
226 4 matches total
FTP: 251 Bytes empfangen in 0.17Sekunden 1.46KB/s
ftp> bye
---> QUIT
221 Goodbye

libraries used:
me-no-dev/ESP Async WebServer@^1.2.3
arduino-libraries/NTPClient @ ^3.1.0
bblanchon/ArduinoJson @ ^6.18.3
lorol/LittleFS_esp32 @ ^1.0.6
makuna/NeoPixelBus@^2.6.7
arduino-libraries/ArduinoMqttClient @ ^0.1.5
peterus/ESP-FTP-Server-Lib@^0.9.6

The library does not compile for ESP8266

Unfortunately the library does not compile for ESP8266.
I suppose the difference is in filesystem classes for two platforms. Apparently, nothing can be done here in simple ways.

The compiler output is below

Processing esp12e (platform: espressif8266; board: esp12e; framework: arduino)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/esp12e.html
PLATFORM: Espressif 8266 (2.6.3) > Espressif ESP8266 ESP-12E
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES:

  • framework-arduinoespressif8266 3.20704.0 (2.7.4)
  • tool-esptool 1.413.0 (4.13)
  • tool-esptoolpy 1.30000.201119 (3.0.0)
  • toolchain-xtensa 2.40802.200502 (4.8.2)
    LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 33 compatible libraries
    Scanning dependencies...
    Dependency Graph
    |-- 1.0
    |--
    | |-- 1.0
    |-- <LittleFS(esp8266)> 0.1.0
    Building in release mode
    Compiling .pio\build\esp12e\src\main.cpp.o
    Compiling .pio\build\esp12e\libc07\ESP-FTP-Server-Lib\ESP-FTP-Server-Lib.cpp.o
    Compiling .pio\build\esp12e\libc07\ESP-FTP-Server-Lib\FTPConnection.cpp.o
    Compiling .pio\build\esp12e\libc07\ESP-FTP-Server-Lib\FTPFilesystem.cpp.o
    Archiving .pio\build\esp12e\liba31\libLittleFS.a
    Compiling .pio\build\esp12e\FrameworkArduino\base64.cpp.o
    Compiling .pio\build\esp12e\FrameworkArduino\cbuf.cpp.o
    Compiling .pio\build\esp12e\FrameworkArduino\cont.S.o
    Compiling .pio\build\esp12e\FrameworkArduino\cont_util.cpp.o
    Compiling .pio\build\esp12e\FrameworkArduino\core_esp8266_app_entry_noextra4k.cpp.o
    Compiling .pio\build\esp12e\FrameworkArduino\core_esp8266_eboot_command.cpp.o
    Compiling .pio\build\esp12e\FrameworkArduino\core_esp8266_features.cpp.o
    Compiling .pio\build\esp12e\FrameworkArduino\core_esp8266_flash_quirks.cpp.o
    In file included from lib\ESP-FTP-Server-Lib\src/FTPCommand.h:7:0,
    from lib\ESP-FTP-Server-Lib\src/FTPConnection.h:7,
    from lib\ESP-FTP-Server-Lib\src/ESP-FTP-Server-Lib.h:8,
    from src\main.cpp:9:
    lib\ESP-FTP-Server-Lib\src/FTPFilesystem.h:18:52: error: 'FILE_READ' was not declared in this scope
    File open(const String & path, const char* mode = FILE_READ);
    ^
    lib\ESP-FTP-Server-Lib\src/FTPFilesystem.h:50:10: error: 'boolean FTPFileImpl::isDirectory()' marked override, but does not override
    boolean isDirectory(void) override { return true; };
    ^
    lib\ESP-FTP-Server-Lib\src/FTPFilesystem.h:51:18: error: 'fs::FileImplPtr FTPFileImpl::openNextFile(const char*)' marked override, but does not override
    fs::FileImplPtr openNextFile(const char* mode) override
    ^
    lib\ESP-FTP-Server-Lib\src/FTPFilesystem.h:61:7: error: 'void FTPFileImpl::rewindDirectory()' marked override, but does not override
    void rewindDirectory(void) override {};
    ^
    lib\ESP-FTP-Server-Lib\src/FTPFilesystem.h:62:2: error: 'FTPFileImpl::operator bool()' marked override, but does not override
    operator bool() override { return false; };
    ^
    lib\ESP-FTP-Server-Lib\src/FTPFilesystem.h: In member function 'fs::FileImplPtr FTPFileImpl::openNextFile(const char*)':
    lib\ESP-FTP-Server-Lib\src/FTPFilesystem.h:59:46: error: cannot allocate an object of abstract type 'FTPFileImpl'
    return fs::FileImplPtr(new FTPFileImpl(next));
    ^
    lib\ESP-FTP-Server-Lib\src/FTPFilesystem.h:36:7: note: because the following virtual functions are pure within 'FTPFileImpl':
    class FTPFileImpl : public fs::FileImpl
    ^
    In file included from C:\users\arkad.platformio\packages\framework-arduinoespressif8266\libraries\LittleFS\src/LittleFS.h:32:0,
    from src\main.cpp:8:
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:38:18: note: virtual bool fs::FileImpl::truncate(uint32_t)
    virtual bool truncate(uint32_t size) = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:41:25: note: virtual const char* fs::FileImpl::fullName() const
    virtual const char* fullName() const = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:42:18: note: virtual bool fs::FileImpl::isFile() const
    virtual bool isFile() const = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:43:18: note: virtual bool fs::FileImpl::isDirectory() const
    virtual bool isDirectory() const = 0;
    ^
    *** [.pio\build\esp12e\src\main.cpp.o] Error 1
    In file included from lib\ESP-FTP-Server-Lib\src\FTPFilesystem.cpp:5:0:
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:18:52: error: 'FILE_READ' was not declared in this scope
    File open(const String & path, const char* mode = FILE_READ);
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:50:10: error: 'boolean FTPFileImpl::isDirectory()' marked override, but does not override
    boolean isDirectory(void) override { return true; };
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:51:18: error: 'fs::FileImplPtr FTPFileImpl::openNextFile(const char*)' marked override, but does not override
    fs::FileImplPtr openNextFile(const char* mode) override
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:61:7: error: 'void FTPFileImpl::rewindDirectory()' marked override, but does not override
    void rewindDirectory(void) override {};
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:62:2: error: 'FTPFileImpl::operator bool()' marked override, but does not override
    operator bool() override { return false; };
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h: In member function 'fs::FileImplPtr FTPFileImpl::openNextFile(const char*)':
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:59:46: error: cannot allocate an object of abstract type 'FTPFileImpl'
    return fs::FileImplPtr(new FTPFileImpl(next));
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:36:7: note: because the following virtual functions are pure within 'FTPFileImpl':
    class FTPFileImpl : public fs::FileImpl
    ^
    In file included from lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:6:0,
    from lib\ESP-FTP-Server-Lib\src\FTPFilesystem.cpp:5:
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:38:18: note: virtual bool fs::FileImpl::truncate(uint32_t)
    virtual bool truncate(uint32_t size) = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:41:25: note: virtual const char* fs::FileImpl::fullName() const
    virtual const char* fullName() const = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:42:18: note: virtual bool fs::FileImpl::isFile() const
    virtual bool isFile() const = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:43:18: note: virtual bool fs::FileImpl::isDirectory() const
    virtual bool isDirectory() const = 0;
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.cpp: In member function 'fs::File FTPFilesystem::open(const String&, const char*)':
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.cpp:30:87: error: cannot allocate an object of abstract type 'FTPFileImpl'
    std::shared_ptr root = std::shared_ptr(new FTPFileImpl("/"));
    ^
    In file included from lib\ESP-FTP-Server-Lib\src\FTPFilesystem.cpp:5:0:
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:36:7: note: since type 'FTPFileImpl' has pure virtual functions
    class FTPFileImpl : public fs::FileImpl
    ^
    In file included from lib\ESP-FTP-Server-Lib\src\FTPCommand.h:7:0,
    from lib\ESP-FTP-Server-Lib\src\FTPConnection.h:7,
    from lib\ESP-FTP-Server-Lib\src\ESP-FTP-Server-Lib.h:8,
    from lib\ESP-FTP-Server-Lib\src\FTPConnection.cpp:5:
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:18:52: error: 'FILE_READ' was not declared in this scope
    File open(const String & path, const char* mode = FILE_READ);
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:50:10: error: 'boolean FTPFileImpl::isDirectory()' marked override, but does not override
    boolean isDirectory(void) override { return true; };
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:51:18: error: 'fs::FileImplPtr FTPFileImpl::openNextFile(const char*)' marked override, but does not override
    fs::FileImplPtr openNextFile(const char* mode) override
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:61:7: error: 'void FTPFileImpl::rewindDirectory()' marked override, but does not override
    void rewindDirectory(void) override {};
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:62:2: error: 'FTPFileImpl::operator bool()' marked override, but does not override
    operator bool() override { return false; };
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h: In member function 'fs::FileImplPtr FTPFileImpl::openNextFile(const char*)':
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:59:46: error: cannot allocate an object of abstract type 'FTPFileImpl'
    return fs::FileImplPtr(new FTPFileImpl(next));
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:36:7: note: because the following virtual functions are pure within 'FTPFileImpl':
    class FTPFileImpl : public fs::FileImpl
    ^
    In file included from lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:6:0,
    from lib\ESP-FTP-Server-Lib\src\FTPCommand.h:7,
    from lib\ESP-FTP-Server-Lib\src\FTPConnection.h:7,
    from lib\ESP-FTP-Server-Lib\src\ESP-FTP-Server-Lib.h:8,
    from lib\ESP-FTP-Server-Lib\src\FTPConnection.cpp:5:
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:38:18: note: virtual bool fs::FileImpl::truncate(uint32_t)
    virtual bool truncate(uint32_t size) = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:41:25: note: virtual const char* fs::FileImpl::fullName() const
    virtual const char* fullName() const = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:42:18: note: virtual bool fs::FileImpl::isFile() const
    virtual bool isFile() const = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:43:18: note: virtual bool fs::FileImpl::isDirectory() const
    virtual bool isDirectory() const = 0;
    ^
    In file included from lib\ESP-FTP-Server-Lib\src\FTPCommand.h:7:0,
    from lib\ESP-FTP-Server-Lib\src\FTPConnection.h:7,
    from lib\ESP-FTP-Server-Lib\src\ESP-FTP-Server-Lib.h:8,
    from lib\ESP-FTP-Server-Lib\src\ESP-FTP-Server-Lib.cpp:1:
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:18:52: error: 'FILE_READ' was not declared in this scope
    File open(const String & path, const char* mode = FILE_READ);
    ^
    In file included from lib\ESP-FTP-Server-Lib\src\FTPConnection.cpp:8:0:
    lib\ESP-FTP-Server-Lib\src\Commands/CWD.h: In member function 'virtual void CWD::run(FTPPath&, const std::vector&)':
    lib\ESP-FTP-Server-Lib\src\Commands/CWD.h:23:46: error: call to 'fs::File FTPFilesystem::open(const String&, const char*)' uses the default argument for parameter 2, which is not yet defined
    File dir = _Filesystem->open(path.getPath());
    ^
    *** [.pio\build\esp12e\libc07\ESP-FTP-Server-Lib\FTPFilesystem.cpp.o] Error 1
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:50:10: error: 'boolean FTPFileImpl::isDirectory()' marked override, but does not override
    boolean isDirectory(void) override { return true; };
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:51:18: error: 'fs::FileImplPtr FTPFileImpl::openNextFile(const char*)' marked override, but does not override
    fs::FileImplPtr openNextFile(const char* mode) override
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:61:7: error: 'void FTPFileImpl::rewindDirectory()' marked override, but does not override
    void rewindDirectory(void) override {};
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:62:2: error: 'FTPFileImpl::operator bool()' marked override, but does not override
    operator bool() override { return false; };
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h: In member function 'fs::FileImplPtr FTPFileImpl::openNextFile(const char*)':
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:59:46: error: cannot allocate an object of abstract type 'FTPFileImpl'
    return fs::FileImplPtr(new FTPFileImpl(next));
    ^
    lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:36:7: note: because the following virtual functions are pure within 'FTPFileImpl':
    class FTPFileImpl : public fs::FileImpl
    ^
    In file included from lib\ESP-FTP-Server-Lib\src\FTPFilesystem.h:6:0,
    from lib\ESP-FTP-Server-Lib\src\FTPCommand.h:7,
    from lib\ESP-FTP-Server-Lib\src\FTPConnection.h:7,
    from lib\ESP-FTP-Server-Lib\src\ESP-FTP-Server-Lib.h:8,
    from lib\ESP-FTP-Server-Lib\src\ESP-FTP-Server-Lib.cpp:1:
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:38:18: note: virtual bool fs::FileImpl::truncate(uint32_t)
    virtual bool truncate(uint32_t size) = 0;
    ^
    In file included from lib\ESP-FTP-Server-Lib\src\FTPConnection.cpp:10:0:
    lib\ESP-FTP-Server-Lib\src\Commands/LIST.h: In member function 'virtual void LIST::run(FTPPath&, const std::vector&)':
    lib\ESP-FTP-Server-Lib\src\Commands/LIST.h:21:55: error: call to 'fs::File FTPFilesystem::open(const String&, const char*)' uses the default argument for parameter 2, which is not yet defined
    File dir = _Filesystem->open(WorkDirectory.getPath());
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:41:25: note: virtual const char* fs::FileImpl::fullName() const
    virtual const char* fullName() const = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:42:18: note: virtual bool fs::FileImpl::isFile() const
    virtual bool isFile() const = 0;
    ^
    C:\users\arkad.platformio\packages\framework-arduinoespressif8266\cores\esp8266/FSImpl.h:43:18: note: virtual bool fs::FileImpl::isDirectory() const
    virtual bool isDirectory() const = 0;
    ^
    In file included from lib\ESP-FTP-Server-Lib\src\FTPConnection.cpp:14:0:
    lib\ESP-FTP-Server-Lib\src\Commands/RETR.h: In member function 'virtual void RETR::run(FTPPath&, const std::vector&)':
    lib\ESP-FTP-Server-Lib\src\Commands/RETR.h:28:33: error: call to 'fs::File FTPFilesystem::open(const String&, const char*)' uses the default argument for parameter 2, which is not yet defined
    _file = _Filesystem->open(path);
    ^
    *** [.pio\build\esp12e\libc07\ESP-FTP-Server-Lib\ESP-FTP-Server-Lib.cpp.o] Error 1
    *** [.pio\build\esp12e\libc07\ESP-FTP-Server-Lib\FTPConnection.cpp.o] Error 1
    ================================================================================================== [FAILED] Took 2.53 seconds ==================================================================================================
    The terminal process "C:\Users\arkad.platformio\penv\Scripts\pio.exe 'run'" terminated with exit code: 1.

Terminal will be reused by tasks, press any key to close it.

File transfer successful, but file size less than the original

Hi,

Thanks for your wonderful FTP server.
I was testing with ESP32 module (38 pin, Chip is ESP32-D0WDQ6 (revision v1.0)), ESP Arduino 2.0.10, and the latest ESP-FTP-Server-Lib.
Either using WinSCP or Filezilla, files can be uploaded or downloaded successfully without error notifications.

However, for unknown reasons some files are actually not completely transferred, as indicated by the size is less than the original file.
This is an example file:
https://drive.google.com/file/d/1bdaU4GCI2FMhASfk7SkDdKOKvaTC2E6O/view?usp=sharing

The original size is 573,825 bytes. But when it is uploaded to the SD Card of ESP32 FTP server, it becomes 573.440 bytes.
So the file becomes defective, and cannot be opened properly.

What may I have done wrong? Thanks for your guidance.

Issue after upgrading to Espressif V4.4.0

Hi,

I'm experiencing an issue after I upgraded the Espressif platform from V3.X to V4.4:

In file included from .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/FTPCommand.h:7, from .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/FTPConnection.h:7, from .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/ESP-FTP-Server-Lib.h:8, from src/global.h:262, from src/main.cpp:4: .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/FTPFilesystem.h: In member function 'virtual fs::FileImplPtr FTPFileImpl::openNextFile(const char*)': .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/FTPFilesystem.h:84:46: error: invalid new-expression of abstract class type 'FTPFileImpl' return fs::FileImplPtr(new FTPFileImpl(next)); ^ .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/FTPFilesystem.h:40:7: note: because the following virtual functions are pure within 'FTPFileImpl': class FTPFileImpl : public fs::FileImpl ^~~~~~~~~~~ In file included from .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/FTPFilesystem.h:6, from .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/FTPCommand.h:7, from .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/FTPConnection.h:7, from .pio/libdeps/lolin_d32_pro/ESP-FTP-Server-Lib/src/ESP-FTP-Server-Lib.h:8, from src/global.h:262, from src/main.cpp:4: C:/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/FS/src/FSImpl.h:39:18: note: 'virtual bool fs::FileImpl::setBufferSize(size_t)' virtual bool setBufferSize(size_t size) = 0; ^~~~~~~~~~~~~

Fyi: using PlatformIo

Thanks!

Compile error

Version 0.11.0

.pio/libdeps/esp32cam/ESP-FTP-Server-Lib/src/FTPFilesystem.h: In member function 'virtual fs::FileImplPtr FTPFileImpl::openNextFile(const char*)':
.pio/libdeps/esp32cam/ESP-FTP-Server-Lib/src/FTPFilesystem.h:84:46: error: invalid new-expression of abstract class type 'FTPFileImpl'
   return fs::FileImplPtr(new FTPFileImpl(next));
                                              ^
.pio/libdeps/esp32cam/ESP-FTP-Server-Lib/src/FTPFilesystem.h:40:7: note:   because the following virtual functions are pure within 'FTPFileImpl':
 class FTPFileImpl : public fs::FileImpl
       ^~~~~~~~~~~
In file included from .pio/libdeps/esp32cam/ESP-FTP-Server-Lib/src/FTPFilesystem.h:6,
                 from .pio/libdeps/esp32cam/ESP-FTP-Server-Lib/src/FTPCommand.h:7,
                 from .pio/libdeps/esp32cam/ESP-FTP-Server-Lib/src/FTPConnection.h:7,
                 from .pio/libdeps/esp32cam/ESP-FTP-Server-Lib/src/ESP-FTP-Server-Lib.h:8,
                 from src/main.cpp:26:
C:/Users/U/.platformio/packages/framework-arduinoespressif32/libraries/FS/src/FSImpl.h:39:18: note:     'virtual bool fs::FileImpl::setBufferSize(size_t)'
     virtual bool setBufferSize(size_t size) = 0;
                  ^~~~~~~~~~~~~
Compiling .pio\build\esp32cam\libfd6\WiFiClientSecure\esp_crt_bundle.c.o
*** [.pio\build\esp32cam\src\main.cpp.o] Error 1

Support for sdFat.h

Hello,

This library is so simple and functional, the only difficulty is that I'm using sdFat instead of the default SD that comes with ESP32 in Arduino. This is mostly to permit support for long filenames.

The line ftp.addFilesystem("SD", &SD); on the example is therefore not accepted as argument.

How would it be possible to add support for sdFat?

Many thanks in advance.

put file to server leads in target file 0 byte

Hi,
I like the integration and your ftp server.
Unfortunately, I try to connect to the server on the ESP32, the use put to put the file on the server. The file is afterwards present on the SD card, but it has 0 Bytes.

Any help appreciated, I would really like to integrate it into my project.

Program I use:

#if defined(ESP32)
#include <SD.h>
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#include <FS.h>
#endif

#include "ESP-FTP-Server-Lib.h"
#include "FTPFilesystem.h"

#define WIFI_SSID     "net"
#define WIFI_PASSWORD "pw"

#define FTP_USER     "ftp"
#define FTP_PASSWORD "ftp"

#ifndef UNIT_TEST
FTPServer ftp;

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

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


  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(WIFI_SSID);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  ftp.addUser(FTP_USER, FTP_PASSWORD);
#if defined(ESP32)
  ftp.addFilesystem("SD", &SD);
#endif
  ftp.begin();
  Serial.println("...---'''---...---'''---...---'''---...");
}

void loop() {
  ftp.handle();
}
#endif

New FTP-commands

Hello!
I am very like your library. Thank you very much! It is very useful and flexible. It is good work
I suggest to include in the library some additional commands. It is OPTS, NOOP, FEAT and MLSD. I have made some code for it and add several lines to your file FTPConnection.cpp (See attached). I have already tested the corrected code for ESP32 and it does work.

FTPConnection.zip
MLSD.zip

Passive mode

Hello Peter,

Great library! Installed it on an Olimex ESP32 Gateway.
Running now on WiFi going to move it to RJ45/Ethernet.

Do you have any idea when you would expect version 1.0 for the passive mode

Regards

Bart

Error compiling for ESP32 (Arduino)

Hello,

Thank for your library! I've used it in previous projects and it works like a charm.

However, building for ESP (using Arduino framework) generates some warning and an error.

This is my compilation output:

Compiling .pio\build\lolin_d32_proJAN\lib152\WiFi\WiFi.cpp.o
Compiling .pio\build\lolin_d32_proJAN\lib152\WiFi\WiFiAP.cpp.o
Compiling .pio\build\lolin_d32_proJAN\lib152\WiFi\WiFiClient.cpp.o
Compiling .pio\build\lolin_d32_proJAN\lib152\WiFi\WiFiGeneric.cpp.o
Compiling .pio\build\lolin_d32_proJAN\lib152\WiFi\WiFiMulti.cpp.o
Compiling .pio\build\lolin_d32_proJAN\lib152\WiFi\WiFiSTA.cpp.o
Compiling .pio\build\lolin_d32_proJAN\lib152\WiFi\WiFiScan.cpp.o
In file included from .pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/FTPCommand.h:7,
                 from .pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/FTPConnection.h:7,
                 from .pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/ESP-FTP-Server-Lib.h:8,
                 from src/main.cpp:2:
.pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/FTPFilesystem.h:57:24: warning: extra tokens at end of #ifdef directive
 #ifdef ESP_IDF_VERSION && ESP_IDF_VERSION_VAL
                        ^~
.pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/FTPFilesystem.h: In member function 'virtual fs::FileImplPtr FTPFileImpl::openNextFile(const char*)':
.pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/FTPFilesystem.h:84:46: error: invalid new-expression of abstract class type 'FTPFileImpl'
   return fs::FileImplPtr(new FTPFileImpl(next));
                                              ^
.pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/FTPFilesystem.h:40:7: note:   because the following virtual functions are pure within 'FTPFileImpl':
 class FTPFileImpl : public fs::FileImpl
       ^~~~~~~~~~~
In file included from .pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/FTPFilesystem.h:6,
                 from .pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/FTPCommand.h:7,
                 from .pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/FTPConnection.h:7,
                 from .pio/libdeps/lolin_d32_proJAN/ESP-FTP-Server-Lib/src/ESP-FTP-Server-Lib.h:8,
                 from src/main.cpp:2:
C:/Users/user/.platformio/packages/framework-arduinoespressif32/libraries/FS/src/FSImpl.h:39:18: note:  'virtual bool fs::FileImpl::setBufferSize(size_t)'
     virtual bool setBufferSize(size_t size) = 0;
                  ^~~~~~~~~~~~~
*** [.pio\build\lolin_d32_proJAN\src\main.cpp.o] Error 1
======================================================================================== [FAILED] Took 9.45 seconds =======================================================================================

Hope you can help me out here

Thanks!

error while compiling

I have tried to run the sample in VSC with ESP32 S2 and I receive the following error:

virtual boolean FTPFileImpl::seekDir(long int)' marked 'override', but does not override

what is wrong?

Question FTP Status

Version 0.11.0
ESP32
PlatformIO (most recent version)

Hi,
I’m using the ftp-server with 2 file systems in parallel, LittleFS and SD.
Everything works as expected. Thanks for your great contribution.

Question:
Is there a way to retrieve some status information about the ftp transfer from inside the ESP program? For instance the program needs to react on "New connection" resp. "Connection close". But info about transfer completion would also be useful.

Do you have any hint?

Thanks in advance

Error compiling for ESP32 Arduino IDE

Appreciate the library trying to get it working but receiving compile errors below:

In file included from C:\Users\val\OneDrive\Documents\Arduino\libraries\ESP-FTP-Server-Lib-master\src/FTPCommand.h:7:0,
from C:\Users\val\OneDrive\Documents\Arduino\libraries\ESP-FTP-Server-Lib-master\src/FTPConnection.h:7,
from C:\Users\val\OneDrive\Documents\Arduino\libraries\ESP-FTP-Server-Lib-master\src/ESP-FTP-Server-Lib.h:8,
from C:\Users\val\OneDrive\Documents\Arduino\YEA\YEA.ino:10:
C:\Users\val\OneDrive\Documents\Arduino\libraries\ESP-FTP-Server-Lib-master\src/FTPFilesystem.h:61:52: error: missing binary operator before token "("
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(2, 0, 3)

FTP Server crashes on "ls"-command

I compiled your example on ESP8266 with Platform IO as is. SPIFFS was built and uploaded. My FTP client connects successfully. But on a "ls"-command the server crashes with reboot in file NLST.h around line 27 in statement

File f = dir.openNextFile();

with
--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Exception (28):
epc1=0x40205725 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

stack>>>

Any idea?

download problem

hi i am on an mac an use filzilla and the examplesketch on esp32 without sd

  • it connects and i see my stored file inside spiffs folder
  • when i try to download an empty file is downloaded (it shows in filezilla that the file shouldnt be empty)
  • filzilla ask me to overwirte the empty file and then its still empty

what am i missing ? is there a permission in the esp32 code i can activate?
or are the filzilla setttings wrong?

i kindly appreciate your help
Bildschirmfoto 2022-07-15 um 12 57 58

Bildschirmfoto 2022-07-15 um 12 59 15

Compile error

HI,

Like to try your library but get on ESP32 a link error:
undefined reference to `fs::FileImpl::getNextFileName(bool*)'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\esp32dev\firmware.elf] Error 1

Any idea?

Thanx Bart

Spaces and Special Characters in FIlenames

First of all: Thanks a lot! It works really super stable and is very fast in the upload compared to other solutions.

The issue I have:
If the files contain spaces (or other non-standard characeters) the file won't be created on the filesystem with this name.
Changing the charset to force UTF8 or something else does not help.
With spaces it only takes the first part to the first space (file completely fine).
With special characters (like "ö" or "ß" or so) it does not work at all.
In the other direction (Download from FTP server) the same thing, but It fails in both cases.

Also creating folders with spaces has the same issue (will only create the part before the first space).

Is there a fix or workaround already available?

I'm using the ES32 with the SDMMCFS.

Crash with example program

Configuration: Windows 10, Visual Studio Code 1.71.2, Platform ESP8266 4.0.1

Good morning to Austria!

I'd like to use this nice FTP-Client but I fail ....
Using your original example test.cpp, exchange credentials for my network access and my FTP-Server, build and upload it in a ESP8266. After correctly connecting to my network I start the FTP-Server and want to establish a session with this client. Then:

`
10:16:47.304 > .......
10:16:51.648 > Connected to XYZ
10:16:51.649 > IP address: 192.168.0.88
10:16:51.651 > ...---'''---...---'''---...---'''---...
10:17:05.349 > New Connection from 192.168.0.110:63988
10:17:05.423 > USER XXX
10:17:05.484 > PASS YYY
10:17:05.592 > SYST
10:17:05.653 > FEAT
10:17:05.717 > HELP SITE
10:17:05.718 > 500 Unknown command
10:17:05.997 > OPTS UTF8 ON
10:17:06.150 > PWD
10:17:06.408 > TYPE A
10:17:06.494 > PORT 192,168,0,110,249,245
10:17:06.555 > MLSD
10:17:06.561 >
10:17:06.561 > --------------- CUT HERE FOR EXCEPTION DECODER ---------------
10:17:06.567 >
10:17:06.567 > Exception (28):
10:17:06.568 > epc1=0x4020613d epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
10:17:06.576 >
10:17:06.576 > >>>stack>>>
10:17:06.577 >
10:17:06.577 > ctx: cont
10:17:06.578 > sp: 3ffffb90 end: 3fffffc0 offset: 0190
10:17:06.582 > 3ffffd20: 00000000 3ffffe4c 3ffffe78 40205309
10:17:06.587 > 3ffffd30: 00000000 3fff139c 00000000 4020589d
10:17:06.591 > 3ffffd40: 3fff139c 3fff1664 3ffffe78 40212150
10:17:06.596 > 3ffffd50: 3fff1664 3ffffe4c 3ffffd70 402063b8
10:17:06.600 > 3ffffd60: 3fff13b0 3fff0474 3fff0474 40205d58
10:17:06.605 > 3ffffd70: 3ffffd70 3ffffd70 00000000 3fff106c
10:17:06.609 > 3ffffd80: 3ffffe4c 3ffeebd0 3fff0f64 402034c3
10:17:06.614 > 3ffffd90: 00004adc 3fff0be8 00000274 4021c754
10:17:06.619 > 3ffffda0: 00000000 00000000 00000000 40100164
10:17:06.623 > 3ffffdb0: 40102209 00000000 00000005 40101dd8
10:17:06.627 > 3ffffdc0: 3ffe9525 4010506f 3ffecfb0 00040000
10:17:06.633 > 3ffffdd0: 40102963 3ffecfb0 00040000 401058e9
10:17:06.637 > 3ffffde0: 00007fff 0125531f 3ffed880 40102b40
10:17:06.642 > 3ffffdf0: 3ffe9db8 00000000 00000000 00000001
10:17:06.646 > 3ffffe00: 00000000 40204c7c 3ffffe70 402071c0
10:17:06.651 > 3ffffe10: 000003ad 00000000 3ffffec8 402071f1
10:17:06.655 > 3ffffe20: 00000000 00000000 3ffffec8 40204c8a
10:17:06.659 > 3ffffe30: 3fff0d94 00000000 00000000 3ffffe70
10:17:06.663 > 3ffffe40: 000003a6 000003a6 3ffe8644 401006fb
10:17:06.668 > 3ffffe50: 000003a1 000003a1 3ffe8644 3fff11bc
10:17:06.673 > 3ffffe60: 00000000 00000002 3ffe8dd5 40209734
10:17:06.677 > 3ffffe70: 3ffe8dd6 00000004 40212e4c 00000000
10:17:06.682 > 3ffffe80: 000003e8 00000004 00000000 3fff139c
10:17:06.686 > 3ffffe90: 3fff1664 00000000 00000000 00000000
10:17:06.691 > 3ffffea0: 00000000 3ffffef0 3ffffefc 3fff106c
10:17:06.695 > 3ffffeb0: 3ffffefc 3ffffef0 00000001 40204076
10:17:06.700 > 3ffffec0: 00000000 3fff0d00 00000000 00000000
10:17:06.704 > 3ffffed0: 3ffe8d00 00000000 3fff0f64 3fff106c
10:17:06.709 > 3ffffee0: 3ffffefc 3fff040c 3fff0404 40205270
10:17:06.714 > 3ffffef0: 3ffffefc 3fff049c 00000001 44534c4d
10:17:06.719 > 3fffff00: 00000000 04000000 3ffeecb8 00000030
10:17:06.723 > 3fffff10: 3fff043c 3fff10b4 00000001 00000002
10:17:06.728 > 3fffff20: 3fff105c 3fff171c 3ffeeb90 40204e54
10:17:06.731 > 3fffff30: 00000000 00000000 00000010 3ffeecb8
10:17:06.737 > 3fffff40: 3ffeebc4 3fff171c 3ffeeb90 40202420
10:17:06.741 > 3fffff50: 3fff0404 3fff1704 00001388 402068c4
10:17:06.745 > 3fffff60: 007a1200 5fe39865 3fff0400 00000000
10:17:06.750 > 3fffff70: 00000000 3fff1704 00000000 00000000
10:17:06.754 > 3fffff80: 00000000 00000000 00000001 3ffeecb8
10:17:06.758 > 3fffff90: 3fffdad0 00000000 3ffeeca4 40201144
10:17:06.763 > 3fffffa0: 3fffdad0 00000000 3ffeeca4 40207bb4
10:17:06.768 > 3fffffb0: feefeffe feefeffe 3ffe8640 40100c61
10:17:06.772 > <<<stack<<<
10:17:06.773 >
10:17:06.773 > --------------- CUT HERE FOR EXCEPTION DECODER ---------------

`
Do you have any idea what I can improve to make it run?

Thank you in advance
Andree

Possible issue regarding CWD internal command.

Dear developer, good Afternoon.

First, thank you for sharing your library.

I'd like to contribute with an issue report.

I've been using your library for connecting an ESP32 to FileZilla and I've found an issue that possibly regard internal CWD command.

The context is an application written in PlatformIO, using FreeRTOS. The setup() function calls:
`
...

servidorFTP.addUser(FTP_user, FTP_psw);

// servidorFTP.setFilesystem(&SD);

// servidorFTP.setFilesystem(&SPIFFS);

servidorFTP.addFilesystem("SD", &SD);

servidorFTP.addFilesystem("SPIFFS", &SPIFFS);

servidorFTP.begin();

...
`

When connecting through FileZilla, connection and access to ESP32 look fine, like this:
`
New Connection from 192.168.5.107:58471

USER base

PASS dados

CWD /SD

TYPE I

PASV

500 Unknown command

PORT 192,168,5,107,228,140

MLSD
`

And I can access, for example, "/SD" folder
image

But then, when I try to access some subfolder, the command is received in ESP32 like that:
`
CWD /SD/Teste05

[E][vfs_api.cpp:64] open(): /sd/SD/Teste05 does not exist
`

And FileZilla reports that this directory doesn't exist:
image

Would this be a failure, or should I fix something in my code?
Thank you.
Regards, Ciro Bruno.

compilation error: pure virtual function "fs::FileImpl::path" has no overrider

Hello,
compiling the example (test.cpp) I got error:

In file included from lib/ESP-FTP-Server-Lib/src/FTPCommand.h:7,
                 from lib/ESP-FTP-Server-Lib/src/FTPConnection.h:7,
                 from lib/ESP-FTP-Server-Lib/src/ESP-FTP-Server-Lib.h:8,
                 from src/main.cpp:10:
lib/ESP-FTP-Server-Lib/src/FTPFilesystem.h: In member function 'virtual fs::FileImplPtr FTPFileImpl::openNextFile(const char*)':
lib/ESP-FTP-Server-Lib/src/FTPFilesystem.h:79:46: error: invalid new-expression of abstract class type 'FTPFileImpl'
   return fs::FileImplPtr(new FTPFileImpl(next));
                                              ^
lib/ESP-FTP-Server-Lib/src/FTPFilesystem.h:40:7: note:   because the following virtual functions are pure within 'FTPFileImpl':
 class FTPFileImpl : public fs::FileImpl
       ^~~~~~~~~~~
In file included from lib/ESP-FTP-Server-Lib/src/FTPFilesystem.h:6,
                 from lib/ESP-FTP-Server-Lib/src/FTPCommand.h:7,
                 from lib/ESP-FTP-Server-Lib/src/FTPConnection.h:7,
                 from lib/ESP-FTP-Server-Lib/src/ESP-FTP-Server-Lib.h:8,
                 from src/main.cpp:10:
/home/lfirnaga/.platformio/packages/framework-arduinoespressif32/libraries/FS/src/FSImpl.h:41:25: note: 	'virtual const char* fs::FileImpl::path() const'
     virtual const char* path() const = 0;
                         ^~~~
*** [.pio/build/esp32dev/src/main.cpp.o] Error 1

Could you please help what is the solution?

The environment:

platformio
platform = espressif32
board = esp32dev
framework = arduino
ide: eclipse

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.