1

I have got the Rest Api's link and the sample code for uploading the image in C sharp but how to upload image to server from android the same thing using java

Here's that sample code

http://xx.xx.xxx.xx/restservice/photos

Sample code for uploading file:
 string requestUrl = string.Format("{0}/UploadPhoto/{1}", url,filnm);
//file name should be uniqque
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUrl);
                request.Method = "POST";
                request.ContentType = "text/plain";
                byte[] fileToSend = FileUpload1.FileBytes; //File bytes
                request.ContentLength = fileToSend.Length;

                using (Stream requestStream = request.GetRequestStream())
                {
                    // Send the file as body request.
                    requestStream.Write(fileToSend, 0, fileToSend.Length);
                    requestStream.Close();
                }

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    Console.WriteLine("HTTP/{0} {1} {2}", response.ProtocolVersion, (int)response.StatusCode, response.StatusDescription);

how you will you do it with the android

EDITED:

With the help of your answer I have written the code over here but I am getting 404 connection response and the ERROR ERROR

    public class ImageUploadToServer extends Activity {

    TextView messageText;
    Button uploadButton;

    String upLoadServerUri = null;
    String urlLink = "http://xx.xx.xxx.xx/restservice/photos/";
    String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/myimg.jpg";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload_to_server);

        uploadButton = (Button)findViewById(R.id.uploadButton);
        messageText  = (TextView)findViewById(R.id.messageText);
        uploadData();

    }

    public void uploadData ()
    {

        HttpURLConnection connection = null;
        DataOutputStream outputStream = null;  
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024; 

        try {
            // FileInputStream fileInputStream = new FileInputStream(new File(path));

             File sourceFile = new File(path); 

             FileInputStream fileInputStream = new FileInputStream(sourceFile);

             URL url = new URL(urlLink);
             connection = (HttpURLConnection) url.openConnection();

             Log.d("Connection:", "Connection" + connection.getResponseCode());

             connection.setDoInput(true);
             connection.setDoOutput(true);
             connection.setUseCaches(false);

             connection.setRequestMethod("POST");

             connection.setRequestProperty("Connection", "Keep-Alive");
             connection.setRequestProperty("Content-Type",
                     "multipart/form-data;boundary=" + boundary);

             outputStream = new DataOutputStream(connection.getOutputStream());
             outputStream.writeBytes(twoHyphens + boundary + lineEnd);
             outputStream
                     .writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\""
                             + path + "\"" + lineEnd);
             outputStream.writeBytes(lineEnd);

             bytesAvailable = fileInputStream.available();
             bufferSize = Math.min(bytesAvailable, maxBufferSize);
             buffer = new byte[bufferSize];

             bytesRead = fileInputStream.read(buffer, 0, bufferSize);

             while (bytesRead > 0) {
                 outputStream.write(buffer, 0, bufferSize);
                 bytesAvailable = fileInputStream.available();
                 bufferSize = Math.min(bytesAvailable, maxBufferSize);
                 bytesRead = fileInputStream.read(buffer, 0, bufferSize);
             }

             outputStream.writeBytes(lineEnd);
             outputStream.writeBytes(twoHyphens + boundary + twoHyphens
                     + lineEnd);

             fileInputStream.close();
             outputStream.flush();
             outputStream.close();

             InputStream responseStream = new BufferedInputStream(connection.getInputStream());

             BufferedReader responseStreamReader = new BufferedReader(new InputStreamReader(responseStream));
             String line = "";
             StringBuilder stringBuilder = new StringBuilder();
             while ((line = responseStreamReader.readLine()) != null) {
                 stringBuilder.append(line).append("\n");
             }
             responseStreamReader.close();

             String response = stringBuilder.toString();
             Log.w("SERVER RESPONE: ", "Server Respone" + response);

             responseStream.close();
             connection.disconnect();

         } catch (Exception ex) {
             Log.i("UPLOAD ERROR", "ERROR ERROR");
         }

    }


}
user1169079
  • 3,053
  • 5
  • 42
  • 71

3 Answers3

1

I am currently using this code to upload small videos to server (PHP server side).

Take not that the apache HttpClient is not supported anymore, so HttpURLConnection is the way to go.

    try {
        FileInputStream fileInputStream = new FileInputStream(new File(
                path));

        URL url = new URL(urlLink);
        connection = (HttpURLConnection) url.openConnection();

        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(false);

        connection.setRequestMethod("POST");

        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type",
                "multipart/form-data;boundary=" + boundary);

        outputStream = new DataOutputStream(connection.getOutputStream());
        outputStream.writeBytes(twoHyphens + boundary + lineEnd);
        outputStream
                .writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\""
                        + path + "\"" + lineEnd);
        outputStream.writeBytes(lineEnd);

        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];

        bytesRead = fileInputStream.read(buffer, 0, bufferSize);

        while (bytesRead > 0) {
            outputStream.write(buffer, 0, bufferSize);
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }

        outputStream.writeBytes(lineEnd);
        outputStream.writeBytes(twoHyphens + boundary + twoHyphens
                + lineEnd);

        fileInputStream.close();
        outputStream.flush();
        outputStream.close();

        InputStream responseStream = new BufferedInputStream(connection.getInputStream());

        BufferedReader responseStreamReader = new BufferedReader(new InputStreamReader(responseStream));
        String line = "";
        StringBuilder stringBuilder = new StringBuilder();
        while ((line = responseStreamReader.readLine()) != null) {
            stringBuilder.append(line).append("\n");
        }
        responseStreamReader.close();

        String response = stringBuilder.toString();
        Log.w("SERVER RESPONE: ", response);

        responseStream.close();
        connection.disconnect();

    } catch (Exception ex) {
        Log.i("UPLOAD ERROR", "ERROR ERROR");
    }
}
Jesson Atherton
  • 644
  • 7
  • 21
  • Jesson I have edited my question with your code it's giving me 404 response code and goes in the exception ERROR ERROR what's wrong with it now where am I going wrong ? – user1169079 Feb 23 '14 at 08:07
  • Check the file path is correct to your file. And you will need to run the code in an asyncTask. Android will not allow you to run long operations on the UI thread. – Jesson Atherton Feb 23 '14 at 23:16
  • I am getting same issue like user1201239 – Pranita Jul 08 '17 at 09:57
0

here is the PHP that may help you for receiving the file on your server.

<?php

try {


    // Checking for upload attack and rendering invalid.
    if (
        !isset($_FILES['uploadedfile']['error']) ||
        is_array($_FILES['uploadedfile']['error'])
    ) {
        throw new RuntimeException('Invalid parameters.');
    }

    // checking for error value on upload
    switch ($_FILES['uploadedfile']['error']) {
        case UPLOAD_ERR_OK:
            break;
        case UPLOAD_ERR_NO_FILE:
            throw new RuntimeException('No file sent.');
        case UPLOAD_ERR_INI_SIZE:
        case UPLOAD_ERR_FORM_SIZE:
            throw new RuntimeException('Exceeded filesize limit.');
        default:
            throw new RuntimeException('Unknown errors.');
    }

    // checking file size 
    if ($_FILES['uploadedfile']['size'] > 1000000) {
        throw new RuntimeException('Exceeded filesize limit.');
    }


    // checking MIME type for mp4... change this to suit your needs
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    if (false === $ext = array_search(
        $finfo->file($_FILES['uploadedfile']['tmp_name']),
        array(
            'mp4' => 'video/mp4',
        ),
        true
    )) {
        throw new RuntimeException('Invalid file format.');
    }


    // Uniquely naming each uploaded for file
    if (!move_uploaded_file(
        $_FILES['uploadedfile']['tmp_name'],
        sprintf('./uploads/%s.%s',
            sha1_file($_FILES['uploadedfile']['tmp_name']),
            $ext
        )
    )) {
        throw new RuntimeException('Failed to move uploaded file.');
    }
    // response code.
    echo 'File is uploaded successfully!';

}
catch (RuntimeException $e) {

    echo $e->getMessage();

}

?>
Jesson Atherton
  • 644
  • 7
  • 21
0

try this....

public static JSONObject postFile(String url,String filePath,int id){

String result="";
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);

File file = new File(filePath);
MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbFile = new FileBody(file, "image/jpeg");

StringBody stringBody= null;
JSONObject responseObject=null;

try {
    stringBody = new StringBody(id+"");
    mpEntity.addPart("file", cbFile);
    mpEntity.addPart("id",stringBody);
    httpPost.setEntity(mpEntity);
    System.out.println("executing request " + httpPost.getRequestLine());
    HttpResponse response = httpClient.execute(httpPost);
    HttpEntity resEntity = response.getEntity();
    result=resEntity.toString();
    responseObject=new JSONObject(result);
} 
catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} 
catch (ClientProtocolException e) {
    e.printStackTrace();
} 
catch (IOException e) {
    e.printStackTrace();
} 
catch (JSONException e) {
    e.printStackTrace();
}
return responseObject;
}