0
HTTP POSTを使用して大きなファイルをサーバーに送信しようとしています。私は4kB以下のファイルを送信できますが、1.5MBのファイルを送信しようとするとタイムアウトが発生します。サーバーはデータを送信せずに切断しますArduinoのHTTP POSTが大きなファイルを送信できないのはなぜですか?
これを修正する方法は誰にも分かりますか?
コードは次のとおりです。 無効読み出しデータ(){
//Variables for WiFi Shield
char ssid[] = "Example"; //your network SSID (name)
char pass[] = "Example1";
char server[] = "http://example.com";
while (status != WL_CONNECTED) {
Serial.print(F("Attempting to connect to SSID: "));
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
// wait 1 second for connection:
delay(1000);
}
Serial.println(F("Connected to wifi"));
// #endif
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println(F("WiFi shield not present"));
// don't continue:
while (true);
}
logfile=SD.open("LOG0038.CSV");
filesize=logfile.size();
logfile.close();
int fileLength = 0;
fileLength = 137 + filesize + 40;
Serial.println(filesize);
Serial.println(F("\nStarting connection to server..."));
Serial.println(server);
// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.println(F("connected to server"));
// Make a HTTP request:
client.setTimeout(Time);
client.print(F("POST /uploadf HTTP/1.1\r\n"));
client.print(F("Host: example.com\r\n"));
client.print(F("User-Agent: Frank/1.0\r\n"));
client.print(F("Accept-Encoding: gzip, deflate\r\n"));
client.print(F("Accept: */*\r\n"));
client.print(F("Connection: keep-alive\r\n"));
client.print(F("Content-Length: "));
client.print(fileLength);
client.print(F("\r\n"));
client.print(F("Content-Type: multipart/form-data; boundary=710ff0c6cf2d4c73b12db64cab12e58c\r\n"));
client.print(F("\r\n"));
client.print(F("--710ff0c6cf2d4c73b12db64cab12e58c\r\nContent-Disposition: form-data; name=\"file\"; filename=\""));
client.print("1000LOG0032.CSV");
client.print(F("\""));
client.print(F("\r\n"));
client.print(F("Content-Type: text/plain\r\n\r\n"));
logfile=SD.open("LOG0038.CSV");
while(logfile.available()){
while(logfile.position() < logfile.size()){
String dataBuff = logfile.readStringUntil('\n');
client.print(dataBuff);
// Serial.println(dataBuff);
client.print("\n");
}
}
client.print(F("\r\n--710ff0c6cf2d4c73b12db64cab12e58c--\r\n"));
//client.flush();
}
while(client.connected()){
while (client.available()&& status==WL_CONNECTED) {
char c = client.read();
Serial.write(c);
}
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
Serial.print(F("\r\n"));
Serial.println(F("disconnecting from server."));
// client.flush();
client.stop();
}
logfile.close();
while (true);
}
サーバーは接続を終了していますか?あなたのサーバでHTTPポストサイズに制限があるかどうかを確認しましたか? – FrancescoAzzola
私はサーバをチェックしましたが、HTTP POSTサイズに制限はありません - arduinoは一度に20kのデータしか送信しないようです – Dave