| 115 | }; |
| 116 | |
| 117 | void handleLittleFSUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final) { |
| 118 | String uploadfilename; |
| 119 | bool error = false; |
| 120 | if (!index) { |
| 121 | String path; |
| 122 | if (!request->hasParam("path", true)) { |
| 123 | final = true; |
| 124 | error = true; |
| 125 | } else { |
| 126 | uploadfilename = request->getParam("path", true)->value(); |
| 127 | Serial.println("update " + uploadfilename); |
| 128 | File file = contentFS->open(uploadfilename, "w"); |
| 129 | file.close(); |
| 130 | UploadInfo* uploadInfo = new UploadInfo{uploadfilename, {}, 0}; |
| 131 | request->_tempObject = (void*)uploadInfo; |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | UploadInfo* uploadInfo = static_cast<UploadInfo*>(request->_tempObject); |
| 136 | |
| 137 | if (uploadInfo != nullptr) { |
| 138 | uploadfilename = uploadInfo->filename; |
| 139 | |
| 140 | if (len) { |
| 141 | if (uploadInfo->bufferSize + len <= UPLOAD_BUFFER_SIZE) { |
| 142 | memcpy(&uploadInfo->buffer[uploadInfo->bufferSize], data, len); |
| 143 | uploadInfo->bufferSize += len; |
| 144 | } else { |
| 145 | xSemaphoreTake(fsMutex, portMAX_DELAY); |
| 146 | File file = contentFS->open(uploadfilename, "a"); |
| 147 | if (file) { |
| 148 | file.write(uploadInfo->buffer, uploadInfo->bufferSize); |
| 149 | file.close(); |
| 150 | uploadInfo->bufferSize = 0; |
| 151 | xSemaphoreGive(fsMutex); |
| 152 | } else { |
| 153 | xSemaphoreGive(fsMutex); |
| 154 | logLine("Failed to open file for appending: " + uploadfilename); |
| 155 | final = true; |
| 156 | error = true; |
| 157 | } |
| 158 | |
| 159 | memcpy(uploadInfo->buffer, data, len); |
| 160 | uploadInfo->bufferSize = len; |
| 161 | } |
| 162 | } |
| 163 | if (final) { |
| 164 | if (uploadInfo->bufferSize > 0) { |
| 165 | xSemaphoreTake(fsMutex, portMAX_DELAY); |
| 166 | File file = contentFS->open(uploadfilename, "a"); |
| 167 | if (file) { |
| 168 | file.write(uploadInfo->buffer, uploadInfo->bufferSize); |
| 169 | file.close(); |
| 170 | xSemaphoreGive(fsMutex); |
| 171 | } else { |
| 172 | xSemaphoreGive(fsMutex); |
| 173 | logLine("Failed to open file for appending: " + uploadfilename); |
| 174 | error = true; |