2016-10-19 38 views
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); 
    } 
+0

サーバーは接続を終了していますか?あなたのサーバでHTTPポストサイズに制限があるかどうかを確認しましたか? – FrancescoAzzola

+0

私はサーバをチェックしましたが、HTTP POSTサイズに制限はありません - arduinoは一度に20kのデータしか送信しないようです – Dave

答えて

0

これが本当の答えではないかもしれませんが、残念ながら私はコメントとしてこれを書くために必要な評判を持っていません。

arduinoについてはわかりませんが、POSTで作業しているときは、max_post_sizeを制限するオプションが必要です。基本的なLAMP設定では、通常は.httaccessにあります。

こちらは、トラブルシューティングに役立ちます。

関連する問題