Я попытался загрузить изображение (JPG) с Arduino на диск Google с помощью API.
Иногда это работает (я делаю запрос POST, как описано в руководстве, и отправляю все биты), и я получаю 200 OK, но иногда, после отправки всех байтов, привод Google не дает мне никакого ответа.
какие-либо предложения?
Здесь есть часть кода, которая дозирует загрузку (обратите внимание, я вставил только «проблемную» часть).
- Иногда цикл while заканчивается, потому что я получаю ответ 200.
- Иногда я не получаю ответа и поэтому снова начинаю отправлять изображение.
В
while (millis() - startTime < 15000 && !received)
Я пытался ждать до десяти минут, но не получил ответа
Serial.println("Token request has been succesful. Starting upload");
bool succesful = false;
// I have obtained the uploadID, now I start uploading
String location = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=" + uploadID;
received = true;
while(!succesful){ // I upload until it is successful
// I stop the previous client session, because now I start a new one, to do the PUT request and upload the file
client.stop();
// Upload request
if (client.connect("www.googleapis.com", 443)) {
client.println("PUT " + location + " HTTP/1.1");
client.println("User-Agent: Arduino Camera");
client.println("Content-Length: " + String(image.size()));
client.println("Connection: close");
client.println();
while (image.available()) {
client.write(image.read()); // Here I send the bytes of the image
}
Serial.println(".");
image.close();
received = false;
} else {
Serial.println("Connection failed");
received = true;
}
// Listening to the response
startTime = millis();
String code = "";
while (millis() - startTime < 15000 && !received) { //try to listen for 5 seconds
int i = 0;
while (client.available() && i < 12) {
received = true;
char c = client.read();
Serial.write(c);
code = code + c;
i++;
}
// HTTP 200 OK
if (code == "HTTP/1.1 200" || code == "HTTP/1.1 201")
{
while(client.available()) {
char c = client.read();
Serial.write(c);
}
Serial.println("\nUpload succesful");
succesful = true;
// client.stop();
return succesful;
}
if (!received) {
client.stop();
Serial.println("\nUpload interrupted. Starting a new session");
// I have to open image again
image = SD.open(filepath, FILE_READ);
}
}