С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.02.2021
Сообщений: 6

Не могу записать файл на SD с HTTP

01.03.2023, 21:14. Показов 556. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем дня форумчане. Появилась одна проблемка, над которой уже два дня голову ломаю и реализовать никак не могу. Приходит, значит у меня файл по 80 порту и должен записаться на SD карту. Для записи использую блок код

C++
1
2
3
4
5
6
7
8
 void handleUpload() {
HTTPUpload& uploadHTML = server.upload();
File uploadSD;
uploadSD = SD.open(uploadHTML.filename.c_str(), "w");
uploadSD.write(uploadHTML.buf, uploadHTML.currentSize); // вот эта строка мне весь мозг выносит:mad:
uploadSD.close();
server.send(200, "text/plain", "File uploaded successfully!");
}
так вот
C++
1
 uploadSD = SD.open(uploadHTML.filename.c_str(), "w");
строка перезаписывает из буфера в созданный мною файл (перед этим я его естественно открыл) постоянно, и получается, если отправлять файл 3000байт, то на SD записывается всего последние 952 байта, а первая часть (2048 байт, как раз размер буфера) не записываются. Как бы это все в цикл завести, чтобы все записалось? (uploadSD - переменная File, а uploadHTMP - File который и пришел с компьютера). Использую библитеку SD.h, все стандартные функции
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2023, 21:14
Ответы с готовыми решениями:

Не могу записать в файл на windows, а на linux могу
Я не понимаю почему на windows не могу записать в файл данные...

Не могу записать файл
unauthorizedexception. Запускаю студию от имени администратора со всеми правами

Не могу записать в файл
Доброго времени суток. Не могу осуществить запись в текстовый файл. Ошибок никаких не выдаёт, но текст не записывается. Никто не знает...

4
Почетный модератор
 Аватар для Humanoid
11554 / 4349 / 452
Регистрация: 12.06.2008
Сообщений: 12,453
01.03.2023, 21:38
На сколько я понимаю по названиям и по описанию проблемы, функция handleUpload() вызывается несколько раз, когда принято некоторое количество байт. И вы каждый раз перезаписываете файл. Наиболее правильным было бы заранее открыть файл, тут выполнять только upload.SD.write(), а когда все данные будут получены, то закрыть файл и передать ответ. Либо (что бы меньше всего менять код) можно поискать, как открыть файл без очистки содержимого... возможно, если вместо "w" указать "a" (по аналогии с fopen()).
0
0 / 0 / 0
Регистрация: 06.02.2021
Сообщений: 6
01.03.2023, 22:55  [ТС]
Я уже пробовал "a" вместо "w" указывать, не сработало, все так же последний кусок буфера записывался в файл...

Вот полный код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <SD.h>
#include <SPI.h>
 
const int SD_CS_PIN = SS;
ESP8266WebServer server(80);
 
void handleRoot() {
  String html = "<html><body>";
  html += "<form method=\"POST\" action=\"/upload\" enctype=\"multipart/form-data\">";
  html += "<input type=\"file\" name=\"file\">";
  html += "<input type=\"submit\" value=\"Upload\">";
  html += "</form></body></html>";
  delay(1000);
  server.send(200, "text/html", html);
}
 
void handleUpload() {
 
  HTTPUpload& uploadHTML = server.upload();
  File uploadSD;
 
    uploadSD = SD.open(uploadHTML.filename.c_str(), "w");
    uploadSD.write(uploadHTML.buf, uploadHTML.currentSize);
    uploadSD.close();
    server.send(200, "text/plain", "File uploaded successfully!");
  }
 
void setup() {
  Serial.begin(115200);
  SPI.begin(); // запускаем SPI
 
if (!SD.begin(SD_CS_PIN)) {
      Serial.println("SD card initialization failed!");
      return;}
      Serial.println("SD card connected!");
 
 
  WiFi.begin("ssid", "pass");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
    Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  server.on("/", HTTP_GET, handleRoot);
  server.on("/upload", HTTP_POST, handleUpload);
  server.begin();
  
}
 
void loop() {
  server.handleClient();
  
}
0
0 / 0 / 0
Регистрация: 06.02.2021
Сообщений: 6
02.03.2023, 11:06  [ТС]
Короче добавил для отслеживания строчек Serial.println и увидел такую картину:
Вместо положенного отправления статуса UPLOAD_FILE_START, отправляется значение 2. Ошибка похоже в void handleRoot(), а не в void handleUpload()... Но с html я еще до конца не дружу... Может кто знает, как исправить?
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
03.03.2023, 10:46
Цитата Сообщение от ospkant Посмотреть сообщение
uploadSD.write(uploadHTML.buf, uploadHTML.currentSize);
а перегрузки нет.... которая без буфера?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2023, 10:46
Помогаю со студенческими работами здесь

Не могу записать в файл
написал программу, числа из одного файла записывать в другой . Вчера работала а седня не работает . помогите, в чем может быть дело?\ ...

Не могу записать в файл
Доброго времени суток. Хочу стандартными средствами винды осуществлять запись строк в файл (vbs скриптом). Но синтаксис языка не...

Не могу записать в файл переменную
Помогите пожалуйста! Я пытаюсь написать программу которая будет записывать в файл переменную, но программа закрывается через 1 секунду...

Не могу записать в нетипизированный файл
Добрый вечер! Пытаюсь записать в нетипизированный файл, и получаю ошибку Uknown Run-Time Error:1784. Type Zap = record ...

Не могу записать BitArray в файл
Имеется string строка cod, в которой сначала идет сто нулей, а потом 39 раз повторяется комбинация &quot;100&quot; Вроде эта строка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru