Android : Upload image to PHP server

27,440

Have you verified that the user apache (or whichever user php is running as) has permissions to write to the directory specified in $file_path?

Put the following code in the same directory as your PHP script is, and then visit it in your web browser.

<?php

$file_path = 'uploads/';

$success = file_put_contents($file_path . "afile", "This is a test");

if($success === false) {
    echo "Couldn't write file";
} else {
    echo "Wrote $success bytes";
}

?>

Does this give a success message or an error message?

If it gives an error message, trying changing the ownership of the uploads directory.

Share:
27,440
wawanopoulos
Author by

wawanopoulos

Updated on December 29, 2020

Comments

  • wawanopoulos
    wawanopoulos over 3 years

    I have write a script to upload an image taken from camera to my server. I get 200OK response but I don't see my image on my server in uploads/ folder :

    enter image description here

    Maybe my script contain an error. Could you help me please ?

    My example is the following link : http://androidexample.com/Upload_File_To_Server_-_Android_Example/index.php?view=article_discription&aid=83&aaid=106

    Here is the compleete Android class :

    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import android.app.ActionBar;
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Color;
    import android.graphics.drawable.ColorDrawable;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class New_annonce_act_step3 extends Activity {
    
        private static final int REQUEST_IMAGE = 100;   
    
        TextView tvPath;
        TextView txtHaut;
        ImageView preview;
        File destination;
        String imagePath;
        ImageButton takePhoto;
        Button btnCreate;
    
        int serverResponseCode = 0;
        ProgressDialog dialog = null;
    
        String upLoadServerUri = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.nouvelle_annonce_step3);
    
            // Change color of action bar
            ActionBar bar = getActionBar();
            bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099CC")));
    
            preview = (ImageView) findViewById(R.id.nouvelle_annonce_step3_phototaken_preview);
            btnCreate = (Button) findViewById(R.id.nouvelle_annonce_step3_btn) ;
            txtHaut = (TextView) findViewById(R.id.nouvelle_annonce_step3_texteHaut);
            takePhoto = (ImageButton) findViewById(R.id.nouvelle_annonce_choose_image);
            preview.setVisibility(View.GONE);
    
            upLoadServerUri = "http://mywebsite.com/database/PDO/uploadFile.php";
    
            String name = dateToString(new Date(),"yyyy-MM-dd-hh-mm-ss");
            destination = new File(Environment.getExternalStorageDirectory(), name + ".jpg");
    
            takePhoto.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(destination));
                    startActivityForResult(intent, REQUEST_IMAGE);
                }
            });
    
            btnCreate.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog = ProgressDialog.show(New_annonce_act_step3.this, "", "Uploading file...", true);
    
                    new Thread(new Runnable() {
                        public void run() {              
                            uploadFile(imagePath);
                        }
                    }).start();        
                }
    
            });
    
    
    
    
    
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if( requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK ){
                try {
                    preview.setVisibility(View.VISIBLE);
                    takePhoto.setVisibility(View.GONE);
                    txtHaut.setText("Cette image est parfaite !");
                    FileInputStream in = new FileInputStream(destination);
                    BitmapFactory.Options options = new BitmapFactory.Options();
                    options.inSampleSize = 10;
                    imagePath = destination.getAbsolutePath();
                    Log.d("INFO", "PATH === " +imagePath);
                    //tvPath.setText(imagePath);
                    Bitmap bmp = BitmapFactory.decodeStream(in, null, options);
                    preview.setImageBitmap(bmp);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
    
            }
            else{
                tvPath.setText("Request cancelled");
            }
        }
    
        public String dateToString(Date date, String format) {
            SimpleDateFormat df = new SimpleDateFormat(format);
            return df.format(date);
        }
    
        public int uploadFile(String sourceFileUri) {
    
            String fileName = sourceFileUri;
    
            HttpURLConnection conn = null;
            DataOutputStream dos = null;  
            String lineEnd = "\r\n";
            String twoHyphens = "--";
            String boundary = "*****";
            int bytesRead, bytesAvailable, bufferSize;
            byte[] buffer;
            int maxBufferSize = 1 * 1024 * 1024; 
            File sourceFile = new File(sourceFileUri); 
    
            if (!sourceFile.isFile()) {
                dialog.dismiss(); 
                Log.e("uploadFile", "Source File not exist :" +imagePath);
                return 0;
            }
            else
            {
                try { 
    
                    // open a URL connection to the Servlet
                    FileInputStream fileInputStream = new FileInputStream(sourceFile);
                    URL url = new URL(upLoadServerUri);
    
                    // Open a HTTP  connection to  the URL
                    conn = (HttpURLConnection) url.openConnection(); 
                    conn.setDoInput(true); // Allow Inputs
                    conn.setDoOutput(true); // Allow Outputs
                    conn.setUseCaches(false); // Don't use a Cached Copy
                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("Connection", "Keep-Alive");
                    conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                    conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                    conn.setRequestProperty("uploaded_file", fileName); 
    
                    dos = new DataOutputStream(conn.getOutputStream());
    
                    dos.writeBytes(twoHyphens + boundary + lineEnd); 
                    dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename="+ fileName + "" + lineEnd);
                    dos.writeBytes(lineEnd);
    
                    // create a buffer of  maximum size
                    bytesAvailable = fileInputStream.available(); 
    
                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    buffer = new byte[bufferSize];
    
                    // read file and write it into form...
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
    
                    while (bytesRead > 0) {
    
                        dos.write(buffer, 0, bufferSize);
                        bytesAvailable = fileInputStream.available();
                        bufferSize = Math.min(bytesAvailable, maxBufferSize);
                        bytesRead = fileInputStream.read(buffer, 0, bufferSize);   
    
                    }
    
                    // send multipart form data necesssary after file data...
                    dos.writeBytes(lineEnd);
                    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
    
                    // Responses from the server (code and message)
                    serverResponseCode = conn.getResponseCode();
                    String serverResponseMessage = conn.getResponseMessage();
    
                    Log.i("uploadFile", "HTTP Response is : "+ serverResponseMessage + ": " + serverResponseCode);
    
                    if(serverResponseCode == 200){
    
                        runOnUiThread(new Runnable() {
                            public void run() {
    
                                Toast.makeText(New_annonce_act_step3.this, "File Upload Complete.", 
                                        Toast.LENGTH_SHORT).show();
                            }
                        });                
                    }    
    
                    //close the streams //
                    fileInputStream.close();
                    dos.flush();
                    dos.close();
    
                } catch (MalformedURLException ex) {
    
                    dialog.dismiss();  
                    ex.printStackTrace();
    
                    runOnUiThread(new Runnable() {
                        public void run() {
    
                            Toast.makeText(New_annonce_act_step3.this, "MalformedURLException", 
                                    Toast.LENGTH_SHORT).show();
                        }
                    });
    
                    Log.e("Upload file to server", "error: " + ex.getMessage(), ex);  
                } catch (Exception e) {
    
                    dialog.dismiss();  
                    e.printStackTrace();
    
                    runOnUiThread(new Runnable() {
                        public void run() {
    
                            Toast.makeText(New_annonce_act_step3.this, "Got Exception : see logcat ", 
                                    Toast.LENGTH_SHORT).show();
                        }
                    });
                    Log.e("Upload file to server Exception", "Exception : "
                            + e.getMessage(), e);  
                }
                dialog.dismiss();       
                return serverResponseCode; 
    
            } // End else block 
        } 
    
    }
    

    And here is the PHP script :

    <?php
        $file_path = "uploads/";
    
        $file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
        if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) {
            echo "success";
        } else{
            echo "fail";
        }
     ?>
    
  • wawanopoulos
    wawanopoulos almost 10 years
    Problem solved ! I forget to set 777 rights for uploads/ directtory