Răsfoiți Sursa

Merge branch 'bugfix/httpd_file_serving_example_chunked_resp' into 'master'

file_server: fix issue with sending last chunk

Closes IDFGH-2414

See merge request espressif/esp-idf!7089
Mahavir Jain 6 ani în urmă
părinte
comite
b5b30736de
1 a modificat fișierele cu 11 adăugiri și 9 ștergeri
  1. 11 9
      examples/protocols/http_server/file_serving/main/file_server.c

+ 11 - 9
examples/protocols/http_server/file_serving/main/file_server.c

@@ -256,15 +256,17 @@ static esp_err_t download_get_handler(httpd_req_t *req)
         /* Read file in chunks into the scratch buffer */
         /* Read file in chunks into the scratch buffer */
         chunksize = fread(chunk, 1, SCRATCH_BUFSIZE, fd);
         chunksize = fread(chunk, 1, SCRATCH_BUFSIZE, fd);
 
 
-        /* Send the buffer contents as HTTP response chunk */
-        if (httpd_resp_send_chunk(req, chunk, chunksize) != ESP_OK) {
-            fclose(fd);
-            ESP_LOGE(TAG, "File sending failed!");
-            /* Abort sending file */
-            httpd_resp_sendstr_chunk(req, NULL);
-            /* Respond with 500 Internal Server Error */
-            httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Failed to send file");
-            return ESP_FAIL;
+        if (chunksize > 0) {
+            /* Send the buffer contents as HTTP response chunk */
+            if (httpd_resp_send_chunk(req, chunk, chunksize) != ESP_OK) {
+                fclose(fd);
+                ESP_LOGE(TAG, "File sending failed!");
+                /* Abort sending file */
+                httpd_resp_sendstr_chunk(req, NULL);
+                /* Respond with 500 Internal Server Error */
+                httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Failed to send file");
+               return ESP_FAIL;
+           }
         }
         }
 
 
         /* Keep looping till the whole file is sent */
         /* Keep looping till the whole file is sent */