Search code examples
phpc++httparduinoesp32

Try to send image file to PHP with HTTPClient


I got this after I try to running my code on esp32

Notice: Undefined index: imageFile in C:\xampp\htdocs\acc.php on line 23

My code on esp32

HTTPClient http;
http.begin("http://192.168.43.86/acc.php");  //Specify destination for HTTP request
http.addHeader("Content-Disposition", "form-data; name=\"imageFile\"; filename=\"picture.jpg\"\r\n");
http.addHeader("Content-type", "image/jpeg");

int httpResponseCode = http.POST(cam.getfb(), cam.getSize());


if (httpResponseCode > 0) {

  String response = http.getString();                       //Get the response to the request

  Serial.println(httpResponseCode);   //Print return code
  Serial.println(response);           //Print request answer

} else {

  Serial.print("Error on sending POST: ");
  Serial.println(httpResponseCode);

}

http.end();

I can send String by using this code but my code above don't work (cam.getfb() return as uint8_t and cam.getSize() return as size_t)

  http.addHeader("Content-type", "application/x-www-form-urlencoded");
  int httpResponseCode = http.POST("word=" + Cword);

code in php

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["imageFile"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(1) {
    $check = getimagesize($_FILES["imageFile"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["imageFile"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["imageFile"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["imageFile"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>

11/13/2018 I try to update my code

<?php
date_default_timezone_set("Asia/Bangkok");
$date = date("Y_m_d_h_i_s");
$directory = "http://192.168.43.192/capture.jpg";
 $data = $rawData = file_get_contents("php://input");
 $new = "images/".$date.".jpg";
 file_put_contents($new, $data);
?>

Solution

  • WORK.

    #include "WiFiClientSecure.h"
    #include "Camera_Exp.h"
    CAMERA cam;
    char ssid[] = "";
    char pass[] = "";  
    #define SENSOR 19
    #define SERVER     ""
    #define PORT     443
    #define BOUNDARY     "--------------------------133747188241686651551404"  
    #define TIMEOUT      20000
    
    void setup() 
    {
     pinMode(SENSOR,INPUT);
      Serial.begin(115200);
      Serial.println("\r\nHello Line Notify");
      cam.setFrameSize(CAMERA_FS_QVGA);
      cam.setMirror(false);
      cam.setVflip(false);
      cam.setWhiteBalance(true);
      esp_err_t err = cam.init();
      if (err != ESP_OK)
      {
        Serial.println("Camera init failed with error =" + String( err));
        return;
      }
      WiFi.begin(ssid, pass);
      unsigned char led_cnt=0;
      while (WiFi.status() != WL_CONNECTED) 
      {
         Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected.");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
    void loop() 
    {
        while(!digitalRead(SENSOR)){
          Serial.println("Undetect");
        }
      String res;
       if(digitalRead(SENSOR))
       {
          Serial.println("Send Picture");
          esp_err_t err;
          err = cam.capture();
          if (err == ESP_OK)
          {
            res = sendImage("asdw","A54S89EF5",cam.getfb(),cam.getSize());
            Serial.println(res);
          }
          else
            Serial.println("Camera Error");
    
            while(digitalRead(SENSOR));
       }
    }
    
    //////
    
    String sendImage(String token,String message, uint8_t *data_pic,size_t size_pic)
    {
      String bodyTxt =  body("message",message);
      String bodyPic =  body("imageFile",message);
      String bodyEnd =  String("--")+BOUNDARY+String("--\r\n");
      size_t allLen = bodyTxt.length()+bodyPic.length()+size_pic+bodyEnd.length();
      String headerTxt =  header(token,allLen);
      WiFiClientSecure client;
       if (!client.connect(SERVER,PORT)) 
       {
        return("connection failed");   
       }
       
       client.print(headerTxt+bodyTxt+bodyPic);
       client.write(data_pic,size_pic);
       client.print("\r\n"+bodyEnd);
       
       delay(20);
       long tOut = millis() + TIMEOUT;
       while(client.connected() && tOut > millis()) 
       {
        if (client.available()) 
        {
          String serverRes = client.readStringUntil('\r');
            return(serverRes);
        }
       }
    }
    String header(String token,size_t length)
    {
      String  data;
          data =  F("POST /ln/bot.php HTTP/1.1\r\n");
          data += F("cache-control: no-cache\r\n");
          data += F("Content-Type: multipart/form-data; boundary=");
          data += BOUNDARY;
          data += "\r\n";
          data += F("User-Agent: PostmanRuntime/6.4.1\r\n");
          data += F("Accept: */*\r\n");
          data += F("Host: ");
          data += SERVER;
          data += F("\r\n");
          data += F("accept-encoding: gzip, deflate\r\n");
          data += F("Connection: keep-alive\r\n");
          data += F("content-length: ");
          data += String(length);
          data += "\r\n";
          data += "\r\n";
        return(data);
    }
    String body(String content , String message)
    {
      String data;
      data = "--";
      data += BOUNDARY;
      data += F("\r\n");
      if(content=="imageFile")
      {
        data += F("Content-Disposition: form-data; name=\"imageFile\"; filename=\"picture.jpg\"\r\n");
        data += F("Content-Type: image/jpeg\r\n");
        data += F("\r\n");
      }
      else
      {
        data += "Content-Disposition: form-data; name=\"" + content +"\"\r\n";
        data += "\r\n";
        data += message;
        data += "\r\n";
      }
       return(data);
    }
    

    and php

    <?php
    $uploadfile = "";
    echo "Uploading ";
    echo $_FILES["imageFile"]["name"];
    if(strlen(basename($_FILES["imageFile"]["name"])) > 0)
    {
     $uploadfile = basename($_FILES["imageFile"]["name"]);
     if(move_uploaded_file($_FILES["imageFile"]["tmp_name"], $uploadfile))
     {
     @chmod($uploadfile,0777); echo " Ok! ";
    $datum = mktime(date('H')+0, date('i'), date('s'), date('m'), date('d'), date('y'));
    if (file_exists("old/".date('Y_m_d', $datum) )) {
     print("Directory already exists.\n");
     } else {
     mkdir("old/".date('Y_m_d', $datum));
     copy("index1.php","old/".date('Y_m_d', $datum)."/index.php");
     print("Directory creating.\n");
     }
    echo "saved ";
    copy($uploadfile,"old/".date('Y_m_d', $datum)."/".date('Y.m.d_H-i-s', $datum).".jpg");
     }
     else echo " Error copying!";
    }
    echo date('Y.m.d_H:i', $datum);
    echo "status = DONE";
    ?>