title: Upload Image from gallery to server in android
body: <p>I am creating an android app. I need to implement a code for uploading profile pic either from gallery or from by capturing from camera.An alert will be shown on clicking the part where picture to be uploaded. It consists of three options One to capture from camera,One to take from gallery,One to cancel.I can successfully
  image captured from camera buy when I try to upload Image from gallery i got this error</p>
  
  <blockquote>
    <p>E/MainActivity: Response from server: java.io.FileNotFoundException: /storage/emulated/0/Pictures/Upload/IMG_20170227_142713.jpg (No such file or directory)</p>
  </blockquote>
  
  <p>This is the code I used to for alert builder to show options and also to open image gallery or to launch camera</p>
  
  <pre><code>//code to choose profile pic
      iv.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              /*Toast.makeText(getApplicationContext(),
                      "Please choose a photo", Toast.LENGTH_LONG)
                      .show();*/
              final CharSequence[] items = { "Take Photo", "Choose from Library",
                      "Cancel" };
  
              AlertDialog.Builder builder = new AlertDialog.Builder(LeftMenusMediaActivity.this);
              builder.setTitle("Add Photo!");
              builder.setItems(items,new DialogInterface.OnClickListener() {
                  @Override
                  public void onClick(DialogInterface dialog, int item) {
  
  
                      if (items[item].equals("Take Photo")) {
  
                          //define the file-name to save photo taken by Camera activity
                          String fileName = "new-photo-name.jpg";
                          //create parameters for Intent with filename
                          ContentValues values = new ContentValues();
                          values.put(MediaStore.Images.Media.TITLE, fileName);
                          values.put(MediaStore.Images.Media.DESCRIPTION,"Image captured by camera");
                          //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState)
                          imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                          //create new Intent
                          Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                          imageUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
  
                          intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
  
                          intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                          startActivityForResult(intent, PICK_Camera_IMAGE);
  
  
  
  
                      } else if (items[item].equals("Choose from Library")) {
  
  
                          try {
                              Intent gintent = new Intent();
                              gintent.setType("image/*");
                              gintent.setAction(Intent.ACTION_GET_CONTENT);
  
                              startActivityForResult(
                                      Intent.createChooser(gintent, "Select Picture"),
                                      PICK_IMAGE);
                          } catch (Exception e) {
                              Toast.makeText(getApplicationContext(),
                                      e.getMessage(),
                                      Toast.LENGTH_LONG).show();
                              Log.e(e.getClass().getName(), e.getMessage(), e);
                          }
  
  
  
                      } else if (items[item].equals("Cancel")) {
                          dialog.dismiss();
                      }
                  }
              });
              builder.show();
          }
      });
  </code></pre>
  
  <p>This is my onActivity result function</p>
  
  <pre><code>@Override
  
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       selectedImageUri = null;
      String filePath = null;
      switch (requestCode) {
          case PICK_IMAGE:
              if (resultCode == Activity.RESULT_OK) {
                  selectedImageUri = data.getData();
                  // getPath(selectedImageUri);
                  launchUploadActivity(true);
                  Toast.makeText(this, selectedImageUri.toString(), Toast.LENGTH_SHORT).show();
              }
              break;
          case PICK_Camera_IMAGE:
              if (resultCode == RESULT_OK) {
                  //use imageUri here to access the image
                  selectedImageUri = imageUri;
                  launchUploadActivity(true);
                      /*Bitmap mPic = (Bitmap) data.getExtras().get("data");
                      selectedImageUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), mPic, getResources().getString(R.string.app_name), Long.toString(System.currentTimeMillis())));*/
              } else if (resultCode == RESULT_CANCELED) {
                  Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
              } else {
                  Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
              }
              break;
      }
  </code></pre>
  
  <p>This is my function to launch upload activity</p>
  
  <pre><code> private void launchUploadActivity(boolean isImage){
      Intent i = new Intent(LeftMenusMediaActivity.this, UploadActivity.class);
      i.putExtra("filePath", selectedImageUri.getPath());
      i.putExtra("isImage", isImage);
      startActivity(i);
  }
  </code></pre>
  
  <p>This the my Upload activity class</p>
  
  <pre><code>public class UploadActivity extends Activity {
  // LogCat tag
  private static final String TAG = MainActivity.class.getSimpleName();
  
  
  private String filePath = null;
  
  long totalSize = 0;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      // Changing action bar background color
   /*     getActionBar().setBackgroundDrawable(
              new ColorDrawable(Color.parseColor(getResources().getString(
                      R.color.action_bar))));*/
  
      // Receiving the data from previous activity
      Intent i = getIntent();
  
      // image or video path that is captured in previous activity
      filePath = i.getStringExtra("filePath");
  
      // boolean flag to identify the media type, image or video
      boolean isImage = i.getBooleanExtra("isImage", true);
  
      if (filePath != null) {
          // Displaying the image or video on the screen
          //previewMedia(isImage);
          new UploadFileToServer().execute();
      } else {
          Toast.makeText(getApplicationContext(),
                  "Sorry, file path is missing!", Toast.LENGTH_LONG).show();
      }
  
  
  
  }
  
  /**
   * Uploading the file to server
   * */
  private class UploadFileToServer extends AsyncTask&lt;Void, Integer, String&gt; {
      @Override
      protected void onPreExecute() {
          // setting progress bar to zero
      //  progressBar.setProgress(0);
          super.onPreExecute();
      }
  
      @Override
      protected String doInBackground(Void... params) {
          return uploadFile();
      }
  
      @SuppressWarnings("deprecation")
      private String uploadFile() {
          String responseString = null;
  
          HttpClient httpclient = new DefaultHttpClient();
          HttpPost httppost = new HttpPost(AppConfig.URL_PHOTO);
  
          try {
              AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                      new AndroidMultiPartEntity.ProgressListener() {
  
  
                          @Override
                          public void transferred(long num) {
                              publishProgress((int) ((num / (float) totalSize) * 100));
                          }
                      });
  
  
              File sourceFile = new File(filePath);
              ;
              // Adding file data to http body
              entity.addPart("image", new FileBody(sourceFile));
  
              // Extra parameters if you want to pass to server
              entity.addPart("website",
                      new StringBody("www.androidhive.info"));
              entity.addPart("email", new StringBody("abc@gmail.com"));
  
              totalSize = entity.getContentLength();
              httppost.setEntity(entity);
  
              // Making server call
  
              HttpResponse response = httpclient.execute(httppost);
  
              HttpEntity r_entity = response.getEntity();
  
              int statusCode = response.getStatusLine().getStatusCode();
  
              if (statusCode == 200) {
                  // Server response
  
                  responseString = EntityUtils.toString(r_entity);
  
              } else {
                  responseString = "Error occurred! Http Status Code: "
                          + statusCode;
              }
  
          } catch (ClientProtocolException e) {
              responseString = e.toString();
          } catch (IOException e) {
              responseString = e.toString();
          }
  
          return responseString;
  
      }
  
      @Override
      protected void onPostExecute(String result) {
          Log.e(TAG, "Response from server: " + result);
  
          // showing the server response in an alert dialog
          showAlert(result);
  
          super.onPostExecute(result);
  
      }
  
  }
  
  /**
   * Method to show alert dialog
   * */
  private void showAlert(String message) {
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      builder.setMessage(message).setTitle("Response from Servers")
              .setCancelable(false)
              .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int id) {
                      // do nothing
                  }
              });
      AlertDialog alert = builder.create();
      alert.show();
  }
  </code></pre>
  
  <p>}</p>
  
  <p>What are the changes needed to make upload from gallery working</p>