Skip to content

Instantly share code, notes, and snippets.

@rajiv-singaseni
Created July 6, 2011 21:19
Show Gist options
  • Save rajiv-singaseni/1068348 to your computer and use it in GitHub Desktop.
Save rajiv-singaseni/1068348 to your computer and use it in GitHub Desktop.
An android activity which demonstrates picking a photo from gallery and uploading it to a remote server.
This application requires the jar file httpmime-4.1.1.jar from apache commons.
It also requires Internet permission in AndroidManifest.xml.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Select a picture and upload"
/>
<ImageView android:id="@android:id/icon" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight="1" />
<Button android:text="Select a photo" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:onClick="pickPhoto" />
<Button android:text="Upload photo" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:onClick="uploadPhoto" />
</LinearLayout>
package com.webile.upload;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import java.util.Date;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
private static final int SELECT_PICTURE = 0;
private ImageView imageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) findViewById(android.R.id.icon);
}
public void pickPhoto(View view) {
//TODO: launch the photo picker
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), SELECT_PICTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK) {
Bitmap bitmap = getPath(data.getData());
imageView.setImageBitmap(bitmap);
}
}
private Bitmap getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String filePath = cursor.getString(column_index);
cursor.close();
// Convert file path into bitmap image using below line.
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
return bitmap;
}
public void uploadPhoto(View view) {
try {
executeMultipartPost();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void executeMultipartPost() throws Exception {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();
bitmap.compress(CompressFormat.JPEG, 50, bos);
byte[] data = bos.toByteArray();
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(
"http://192.168.1.107:8888/files/upload_file.php");
String fileName = String.format("File_%d.png",new Date().getTime());
ByteArrayBody bab = new ByteArrayBody(data, fileName);
// File file= new File("/mnt/sdcard/forest.png");
// FileBody bin = new FileBody(file);
MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("file", bab);
postRequest.setEntity(reqEntity);
int timeoutConnection = 60000;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
int timeoutSocket = 60000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpConnectionParams.setTcpNoDelay(httpParameters, true);
HttpResponse response = httpClient.execute(postRequest);
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
String sResponse;
StringBuilder s = new StringBuilder();
while ((sResponse = reader.readLine()) != null) {
s = s.append(sResponse);
}
System.out.println("Response: " + s);
} catch (Exception e) {
// handle exception here
e.printStackTrace();
// Log.e(e.getClass().getName(), e.getMessage());
}
}
}
@sajjadIslam2619
Copy link

where is ur PHP file ?

Copy link

ghost commented Dec 26, 2014

where is the php script?

@ArifAbdullah06
Copy link

please post php script

@bhavikshah92
Copy link

How can I send Image and Data together?

@mohit-codelee
Copy link

I love this post... Helped me alot in time of need.

@Sunil02324
Copy link

Where should we place the httpmime-4.1.1.jar file?

@rambabusaravanan
Copy link

rambabusaravanan commented Jun 18, 2016

My uri I got from onActivityResult is
content://com.android.providers.media.documents/document/image%3A7711

The snippet cursor.getString(column_index); returns null value in my case.

@ErickMwazonga
Copy link

Please consider posting the php script for the beginners.
Thanks in advance.

Copy link

ghost commented Nov 6, 2016

please share PHP Script .

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment