Created
July 6, 2011 21:19
-
-
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 file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This application requires the jar file httpmime-4.1.1.jar from apache commons. | |
It also requires Internet permission in AndroidManifest.xml. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | |
} | |
} | |
} |
How can I send Image and Data together?
I love this post... Helped me alot in time of need.
Where should we place the httpmime-4.1.1.jar file?
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.
Please consider posting the php script for the beginners.
Thanks in advance.
please share PHP Script .
Thanks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
please post php script