smford / esp32-asyncwebserver-fileupload-example

Examples of how to upload files to an ESP32 using Asyncwebserver, SPIFFS and an Upload progress bar.
Apache License 2.0
76 stars 27 forks source link

Files could neither be deleted nor downloaded - example 2 #4

Open janphoffmann opened 1 year ago

janphoffmann commented 1 year ago

In the example 2 I could not download the uploaded file and could not delete the uploaded file.

I traced the issue to: line 99: if(!SPIFFS.exists(filename) the filename is defined with: const char *fileName = request->getParam("name")->value().c_str(); (line 94)

I did a rather ugly workauround with the following code:

    char *cstr1 = (char*)malloc(strlen(request->getParam("name")->value().c_str())+1);
    strcpy(cstr1,"/");
    strcat(cstr1, fileName);
    if (!SPIFFS.exists(cstr1)){
    .
    .
     request->send(SPIFFS, cstr1, "application/octet-stream");
     .
    .
    SPIFFS.remove(cstr1);
    .
    .
    free(cstr1);
viniciusro commented 1 year ago

Same issue here, did this modification:

char dataPath[120] = {0}; memset(dataPath, 0x0, sizeof(dataPath)); strcpy(dataPath, gifFile.path());

and replaced all fileName to dataPath

That was my work around.

smford commented 1 year ago

Thank you @janphoffmann & @viniciusro , I suspect libraries have changed since this was first published which is causing this. When I get time over the next couple weeks I will test and update.

ens4dz commented 1 year ago

I remplaced this line: const char *fileName = request->getParam("name")->value().c_str(); with this: String fileName = "/"+String(request->getParam("name")->value() );

kbhuinfo commented 1 year ago

Works like a charm. PR.

rtek1000 commented 3 months ago

In my case, only '/' was missing before the file name.

if (!FFat.exists(String('/') + fileName)) {

https://github.com/smford/esp32-asyncwebserver-fileupload-example/blob/c47a5c510c6036bfeb8c20f549bb2874819ea5c4/example-02/webserver.ino#L99


request->send(FFat, String('/') + fileName, "application/octet-stream");

https://github.com/smford/esp32-asyncwebserver-fileupload-example/blob/c47a5c510c6036bfeb8c20f549bb2874819ea5c4/example-02/webserver.ino#L106


FFat.remove(String('/') + fileName);

https://github.com/smford/esp32-asyncwebserver-fileupload-example/blob/c47a5c510c6036bfeb8c20f549bb2874819ea5c4/example-02/webserver.ino#L109