2016-10-19 108 views
0

我正嘗試使用HTTP POST將大文件發送到服務器。我可以發送4kB或更少的文件,但是當我嘗試發送一個1.5MB的文件時,似乎有時間了。服務器斷開連接而不發送數據爲什麼Arduino上的HTTP POST無法發送大文件

有誰知道如何解決這個問題?

的代碼是: 無效READDATA(){

//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中找到。

我希望這可以幫助您排除故障。