MCPcopy Create free account
hub / github.com/OpenEPaperLink/OpenEPaperLink / doImageUpload

Function doImageUpload

ESP32_AP-Flasher/src/web.cpp:903–1021  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

901};
902
903void doImageUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
904 String uploadfilename;
905 if (!index) {
906 if (config.runStatus != RUNSTATUS_RUN) {
907 request->send(409, "text/plain", "Come back later");
908 return;
909 }
910 if (!request->hasParam("mac", true)) {
911 request->send(400, "text/plain", "parameters incomplete");
912 return;
913 }
914 logLine("http imageUpload " + uploadfilename);
915
916 uploadfilename = request->getParam("mac", true)->value() + "_" + String(millis()) + ".jpg";
917 File file = contentFS->open("/temp/" + uploadfilename, "w");
918 file.close();
919 Serial.println("upload started " + uploadfilename);
920
921 UploadInfo *uploadInfo = new UploadInfo{uploadfilename, {}, 0};
922 request->_tempObject = (void *)uploadInfo;
923 }
924
925 UploadInfo *uploadInfo = static_cast<UploadInfo *>(request->_tempObject);
926
927 if (uploadInfo != nullptr) {
928 uploadfilename = uploadInfo->filename;
929
930 if (len) {
931 if (uploadInfo->bufferSize + len <= UPLOAD_BUFFER_SIZE) {
932 memcpy(&uploadInfo->buffer[uploadInfo->bufferSize], data, len);
933 uploadInfo->bufferSize += len;
934 } else {
935 xSemaphoreTake(fsMutex, portMAX_DELAY);
936 File file = contentFS->open("/temp/" + uploadfilename, "a");
937 if (file) {
938 file.write(uploadInfo->buffer, uploadInfo->bufferSize);
939 file.close();
940 uploadInfo->bufferSize = 0;
941 xSemaphoreGive(fsMutex);
942 } else {
943 xSemaphoreGive(fsMutex);
944 logLine("Failed to open file for appending: " + uploadfilename);
945 }
946
947 memcpy(uploadInfo->buffer, data, len);
948 uploadInfo->bufferSize = len;
949 }
950 }
951
952 if (final) {
953 if (uploadInfo->bufferSize > 0) {
954 xSemaphoreTake(fsMutex, portMAX_DELAY);
955 File file = contentFS->open("/temp/" + uploadfilename, "a");
956 if (file) {
957 file.write(uploadInfo->buffer, uploadInfo->bufferSize);
958 file.close();
959 xSemaphoreGive(fsMutex);
960 } else {

Callers

nothing calls this directly

Calls 8

logLineFunction · 0.85
memcpyFunction · 0.85
hex2macFunction · 0.85
wsSendTaginfoFunction · 0.85
openMethod · 0.80
closeMethod · 0.80
printlnMethod · 0.80
writeMethod · 0.45

Tested by

no test coverage detected