Skip to content

Instantly share code, notes, and snippets.

@rajiv-singaseni
Created July 6, 2011 21:19

Revisions

  1. rajiv-singaseni created this gist Jul 6, 2011.
    157 changes: 157 additions & 0 deletions MainActivity.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,157 @@
    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());

    }

    }
    }
    3 changes: 3 additions & 0 deletions README.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    This application requires the jar file httpmime-4.1.1.jar from apache commons.

    It also requires Internet permission in AndroidManifest.xml.
    18 changes: 18 additions & 0 deletions main.xml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    <?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>