Search code examples
phpandroidlinuximageuploading

Android - Uploading images via PHP script


I'm trying to upload an image stored on the phone into a linux directory. The code seems to run without errors and the exceptions don't catch any problems however the image isn't uploaded. A HTTP 200 ok response is sent back. Looking through the logcat the only warning displayed is:

Failure getting entry for 0x01080c1 (t=7 e=705) in package 0 (error -75)

I have made sure that I've used the internet permission statement in the android manifest and I've set the destination folder privileges to 777, is there something I'm missing out?

This is the android function:

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 :"
                +uploadFilePath + "" + uploadFileName);

        runOnUiThread(new Runnable() {
            public void run() {
                messageText.setText("Source File not exist :"
                        +uploadFilePath + "" + uploadFileName);
            }
        });

        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=\"uploadedfile\";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() {

                        String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                +" http://www.androidexample.com/media/uploads/"
                                +uploadFileName;

                        messageText.setText(msg);
                        Toast.makeText(UploadToServer.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() {
                    messageText.setText("MalformedURLException Exception : check script url.");
                    Toast.makeText(UploadToServer.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() {
                    messageText.setText("Got Exception : see logcat ");
                    Toast.makeText(UploadToServer.this, "Got Exception : see logcat ",
                            Toast.LENGTH_SHORT).show();
                }
            });
            Log.e("Upload file to server Exception", "Exception : "
                    + e.getMessage(), e);
        }
        dialog.dismiss();
        return serverResponseCode;

    }

This is the PHP script

<?php

$file_path = "/var/www/images/";

$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";
}
?>

Solution

  • Try This It May Help You

                HttpURLConnection mHttpURLConnection = null;
                DataOutputStream mOutputStream = null;
                String strLineEnd = "\r\n";
                String strTwoHyphens = "--";
                strUpLoadServerUri = UploadServerPath;
                String strBoundary = "*****";
                int bytesRead, bytesAvailable, bufferSize;
                byte[] buffer;
                int maxBufferSize = 1 * 1024 * 1024;
                File sourceFile = new File(strUploadFiles);
    
                if (sourceFile.isFile()) {
    
                    try {
    
                        // open a URL connection to the Servlet
                        FileInputStream fileInputStream = new FileInputStream(sourceFile);
                        URL url = new URL(strUpLoadServerUri);
    
                        // Open a HTTP connection to the URL
    
                        mHttpURLConnection = (HttpURLConnection) url
                                .openConnection();
                        mHttpURLConnection.setDoInput(true); // Allow Inputs
                        mHttpURLConnection.setDoOutput(true); // Allow Outputs
                        mHttpURLConnection.setUseCaches(false); // Don't use a Cached Copy
    
                        mHttpURLConnection.setRequestMethod("POST");
                        mHttpURLConnection.setRequestProperty("Connection","Keep-Alive");
                        mHttpURLConnection.setRequestProperty("ENCTYPE","multipart/form-data");
                        mHttpURLConnection.setRequestProperty("Content-Type","multipart/form-data;boundary=" + strBoundary);
                        mHttpURLConnection.setRequestProperty("uploaded_file",strUploadFiles);
    
                        mOutputStream = new DataOutputStream(mHttpURLConnection.getOutputStream());
    
                        mOutputStream.writeBytes(strTwoHyphens + strBoundary + strLineEnd);
                        mOutputStream.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename="+ strUploadFiles + strLineEnd);
    
                        mOutputStream.writeBytes(strLineEnd);
    
                        // 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) {
    
                            mOutputStream.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...
                        mOutputStream.writeBytes(strLineEnd);
                        mOutputStream.writeBytes(strTwoHyphens + strBoundary + strTwoHyphens + strLineEnd);
    
                        // Responses from the server (code and message)
                        serverResponseCode = mHttpURLConnection.getResponseCode();
    
                        // close the streams //
                        fileInputStream.close();
                        mOutputStream.flush();
                        mOutputStream.close();
    
                    } catch (MalformedURLException ex) {
                        ex.printStackTrace();
                        Log.e("Upload file to server", "error: " + ex.getMessage(),ex);
                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.e("Upload file to server Exception","Exception : " + e.getMessage(), e);
                    }
                }
    
                if (serverResponseCode == 200) {
    
                    Log.d("File Uploaded For ",strUploadFiles + "   Successful");
                }
                else{
                    Log.d("File Uploaded For ",strUploadFiles + "   Failed");
                }
    

    Hear strUploadFiles Is Your File Path

    Your Serverside Code

    <?php
            $Dir = "C:/Path/";
    
        if(!is_dir($Dir)) 
        {
            mkdir($Dir, 0777);
            chmod($Dir, 0777);
        }
    
    
        $file_path = $Dir.basename( $_FILES['uploaded_file']['name']);
    
     ?>