Im facing some problem with upload image to my wamp server which located in aws ec2 instance, When im trying to uplaod some parametrs into my tables, all the parametrs are uploaded succesfully except the image itself, the wamp server installed on Microsoft Windows Server 2012 R2 Base, which provided by amazon, port 80 opened, and so is the httpd.conf file with permissions.
here is the code from android which uploads the image and the parametrs:
public void uploadProduct() {
//getting name for the image
String name = editText.getText().toString().trim();
String Description = editText2.getText().toString().trim();
String Serial = editText3.getText().toString().trim();
String price = editText4.getText().toString().trim();
//getting the actual path of the image
String path = getPath(fileUri);
//Uploading code
try {
String uploadId = UUID.randomUUID().toString();
//Creating a multi part request
new MultipartUploadRequest(this, uploadId, URL_INDEX)
.addFileToUpload(path, "image") //Adding file
.addParameter("name", name)
.addParameter("product_description", Description)
.addParameter("product_serial", Serial)
.addParameter("product_price", price)//Adding text parameter to the request
.setNotificationConfig(new UploadNotificationConfig())
.setMaxRetries(2)
.startUpload(); //Starting the upload
} catch (Exception exc) {
Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show();
}
}
The code for getting image Uri:
public String getPath(Uri uri) {
String filePath = "";
String wholeID = DocumentsContract.getDocumentId(uri);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = getApplicationContext().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
column, sel, new String[]{ id }, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
return filePath;
}
and the php:
require_once 'db_config.php';
$upload_path = 'uploads/';
$upload_url = 'http://55.26.0.105/android/uploads/';
$response = array();
if($_SERVER['REQUEST_METHOD']=='POST'){
//checking the required parameters from the request
if( isset($_FILES['image']['name']) and isset($_POST['name']) and isset($_POST['product_description']) and isset($_POST['product_serial']) and isset($_POST['product_price'])){
//connecting to the database
$con = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME) or die('Unable to Connect...');
//getting values from the request
$product_serial_num = (int) $_POST['product_serial'];
$product_price = (int) $_POST['product_price'];
$product_title = $_POST['name'];
$product_description = $_POST['product_description'];
//getting img info from the request
$fileInfo = pathinfo($_FILES['image']['name']);
//getting the file extension
$extension = $fileInfo['extension'];
//file url to store in the database
$file_url = $upload_url . $product_title . '.' . $extension;
//file path to upload in the server
$file_path = $upload_path . $product_title . '.'. $extension;
//trying to save the file in the directory
try{
//saving the file
move_uploaded_file($_FILES['image']['tmp_name'],$file_path);
$sql = "INSERT INTO product_tbl(product_serial_num, product_price, product_title, product_description, product_img) VALUES ('$product_serial_num','$product_price','$product_title','$product_description', '$file_url');";
//adding the path and name to database
if(mysqli_query($con,$sql)){
//filling response array with values
$response['error'] = false;
$response['url'] = $file_url;
$response['name'] = $product_title;
}
//if some error occurred
}catch(Exception $e){
$response['error']=true;
$response['message']=$e->getMessage();
}
//displaying the response
echo json_encode($response);
//closing the connection
mysqli_close($con);
}else{
$response['error']=true;
$response['message']='Please choose a file';
}
} ?>
Any help would be appriciated, thanks a lot!
Probable causes :
Solutions :
And to confirm if the file is uploaded successfully or not, you should wrap your move_uploaded_file($_FILES['image']['tmp_name'],$file_path);
in a if()
condition.
Since PHP move_uploaded_file() function returns true
if the file is uploaded successfully, or false
otherwise.