2

i was make two file one is mainActivity and second is MultipartEntity i post both file

MainActivity.java

                  package com.example.picupload;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    private Button mTakePhoto;
    private ImageView mImageView;
    private static final String TAG = "upload";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTakePhoto = (Button) findViewById(R.id.take_photo);
        mImageView = (ImageView) findViewById(R.id.imageview);

        mTakePhoto.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        int id = v.getId();
        switch (id) {
        case R.id.take_photo:
            takePhoto();
            break;
        }
    }

    private void takePhoto() {
//      Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//      intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
//      startActivityForResult(intent, 0);
        dispatchTakePictureIntent();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        Log.i(TAG, "onActivityResult: " + this);
        if (requestCode == REQUEST_TAKE_PHOTO && resultCode == Activity.RESULT_OK) {
            setPic();
//          Bitmap bitmap = (Bitmap) data.getExtras().get("data");
//          if (bitmap != null) {
//              mImageView.setImageBitmap(bitmap);
//              try {
//                  sendPhoto(bitmap);
//              } catch (Exception e) {
//                  // TODO Auto-generated catch block
//                  e.printStackTrace();
//              }
//          }
        }
    }

    private void sendPhoto(Bitmap bitmap) throws Exception {
        new UploadTask().execute(bitmap);
    }

    private class UploadTask extends AsyncTask<Bitmap, Void, Void> {

        protected Void doInBackground(Bitmap... bitmaps) {
            if (bitmaps[0] == null)
                return null;
            setProgress(0);

            Bitmap bitmap = bitmaps[0];
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); // convert Bitmap to ByteArrayOutputStream
            InputStream in = new ByteArrayInputStream(stream.toByteArray()); // convert ByteArrayOutputStream to ByteArrayInputStream

            DefaultHttpClient httpclient = new DefaultHttpClient();
            try {
                HttpPost httppost = new HttpPost(
                        "http://192.168.8.84:8003/savetofile.php"); // server

                MultipartEntity reqEntity = new MultipartEntity();
                reqEntity.addPart("myFile",
                        System.currentTimeMillis() + ".jpg", in);
                httppost.setEntity(reqEntity);

                Log.i(TAG, "request " + httppost.getRequestLine());
                HttpResponse response = null;
                try {
                    response = httpclient.execute(httppost);
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    if (response != null)
                        Log.i(TAG, "response " + response.getStatusLine().toString());
                } finally {

                }
            } finally {

            }

            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (stream != null) {
                try {
                    stream.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            // TODO Auto-generated method stub
            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            Toast.makeText(MainActivity.this, R.string.uploaded, Toast.LENGTH_LONG).show();
        }
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Log.i(TAG, "onResume: " + this);
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        Log.i(TAG, "onSaveInstanceState");
    }

    String mCurrentPhotoPath;

    static final int REQUEST_TAKE_PHOTO = 1;
    File photoFile = null;

    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Ensure that there's a camera activity to handle the intent
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            // Create the File where the photo should go
            File photoFile = null;
            try {
                photoFile = createImageFile();
            } catch (IOException ex) {
                // Error occurred while creating the File

            }
            // Continue only if the File was successfully created
            if (photoFile != null) {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                        Uri.fromFile(photoFile));
                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
            }
        }
    }

    /**
     * http://developer.android.com/training/camera/photobasics.html
     */
    private File createImageFile() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        String storageDir = Environment.getExternalStorageDirectory() + "/picupload";
        File dir = new File(storageDir);
        if (!dir.exists())
            dir.mkdir();

        File image = new File(storageDir + "/" + imageFileName + ".jpg");

        // Save a file: path for use with ACTION_VIEW intents
        mCurrentPhotoPath = image.getAbsolutePath();
        Log.i(TAG, "photo path = " + mCurrentPhotoPath);
        return image;
    }

    private void setPic() {
        // Get the dimensions of the View
        int targetW = mImageView.getWidth();
        int targetH = mImageView.getHeight();

        // Get the dimensions of the bitmap
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        bmOptions.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
        int photoW = bmOptions.outWidth;
        int photoH = bmOptions.outHeight;

        // Determine how much to scale down the image
        int scaleFactor = Math.min(photoW/targetW, photoH/targetH);

        // Decode the image file into a Bitmap sized to fill the View
        bmOptions.inJustDecodeBounds = false;
        bmOptions.inSampleSize = scaleFactor << 1;
        bmOptions.inPurgeable = true;

        Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);

        Matrix mtx = new Matrix();
        mtx.postRotate(90);
        // Rotating Bitmap
        Bitmap rotatedBMP = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), mtx, true);

        if (rotatedBMP != bitmap)
            bitmap.recycle();

        mImageView.setImageBitmap(rotatedBMP);

        try {
            sendPhoto(rotatedBMP);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

MultipartEntity.java

package com.example.picupload;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.message.BasicHeader;

public class MultipartEntity implements HttpEntity {

    private String boundary = null;

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    boolean isSetLast = false;
    boolean isSetFirst = false;

    public MultipartEntity() {
        this.boundary = System.currentTimeMillis() + "";
    }

    public void writeFirstBoundaryIfNeeds(){
        if(!isSetFirst){
            try {
                out.write(("--" + boundary + "\r\n").getBytes());
            } catch (final IOException e) {

            }
        }
        isSetFirst = true;
    }

    public void writeLastBoundaryIfNeeds() {
        if(isSetLast){
            return ;
        }
        try {
            out.write(("\r\n--" + boundary + "--\r\n").getBytes());
        } catch (final IOException e) {

        }
        isSetLast = true;
    }

    public void addPart(final String key, final String value) {
        writeFirstBoundaryIfNeeds();
        try {
            out.write(("Content-Disposition: form-data; name=\"" +key+"\"\r\n").getBytes());
            out.write("Content-Type: text/plain; charset=UTF-8\r\n".getBytes());
            out.write("Content-Transfer-Encoding: 8bit\r\n\r\n".getBytes());
            out.write(value.getBytes());
            out.write(("\r\n--" + boundary + "\r\n").getBytes());
        } catch (final IOException e) {

        }
    }

    public void addPart(final String key, final String fileName, final InputStream fin){
        addPart(key, fileName, fin, "application/octet-stream");
    }

    public void addPart(final String key, final String fileName, final InputStream fin, String type){
        writeFirstBoundaryIfNeeds();
        try {
            type = "Content-Type: "+type+"\r\n";
            out.write(("Content-Disposition: form-data; name=\""+ key+"\"; filename=\"" + fileName + "\"\r\n").getBytes());
            out.write(type.getBytes());
            out.write("Content-Transfer-Encoding: binary\r\n\r\n".getBytes());

            final byte[] tmp = new byte[4096];
            int l = 0;
            while ((l = fin.read(tmp)) != -1) {
                out.write(tmp, 0, l);
            }
            out.flush();
        } catch (final IOException e) {

        } finally {
            try {
                fin.close();
            } catch (final IOException e) {

            }
        }
    }

    public void addPart(final String key, final File value) {
        try {
            addPart(key, value.getName(), new FileInputStream(value));
        } catch (final FileNotFoundException e) {

        }
    }

    @Override
    public long getContentLength() {
        writeLastBoundaryIfNeeds();
        return out.toByteArray().length;
    }

    @Override
    public Header getContentType() {
        return new BasicHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
    }

    @Override
    public boolean isChunked() {
        return false;
    }

    @Override
    public boolean isRepeatable() {
        return false;
    }

    @Override
    public boolean isStreaming() {
        return false;
    }

    @Override
    public void writeTo(final OutputStream outstream) throws IOException {
        outstream.write(out.toByteArray());
    }

    @Override
    public Header getContentEncoding() {
        return null;
    }

    @Override
    public void consumeContent() throws IOException,
    UnsupportedOperationException {
        if (isStreaming()) {
            throw new UnsupportedOperationException(
            "Streaming entity does not implement #consumeContent()");
        }
    }

    @Override
    public InputStream getContent() throws IOException,
    UnsupportedOperationException {
        return new ByteArrayInputStream(out.toByteArray());
    }

}

saveimage.php

<?php

if (isset($_FILES['myFile'])) {
    // Example:
    move_uploaded_file($_FILES['myFile']['tmp_name'], "upload/" . $_FILES['myFile']['name']);
    echo 'successful';
}
?>

geting error in

try { response = httpclient.execute(httppost); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); }

please help me to solve..

3
  • It will be get direct exception and it will not be respond anything. Commented Dec 18, 2014 at 11:55
  • OK, Can you debug it and see the value of e in ClientProtocolException? Commented Dec 18, 2014 at 11:57
  • yes i done already debug. its null coming. after 2 or 3 minits exception catch and its null.. Commented Dec 18, 2014 at 12:01

4 Answers 4

2

working for me and please try to different network like wifi or mobile data

// 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;
Sign up to request clarification or add additional context in comments.

Comments

2

Hey you can use this method for sending image to server

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";


public static JSONObject sendJSONDataWithImage() {

    String Content = null;

    DefaultHttpClient httpClient = new DefaultHttpClient();

    HttpPost httpPost = new HttpPost("http://192.168.8.84:8003/savetofile.php");

    File file = new File(yourFilePathwithfileName);
    MultipartEntity reqEntity = new MultipartEntity(
            HttpMultipartMode.BROWSER_COMPATIBLE);

    Charset chars = Charset.forName("UTF-8");

    int size = (int) file.length();
    byte[] bytes = new byte[size];
    ByteArrayBody bab = null;
    try {
        BufferedInputStream buf = new BufferedInputStream(
                new FileInputStream(file));
        buf.read(bytes, 0, bytes.length);
        buf.close();
        bab = new ByteArrayBody(bytes, yourFilePathwithfileName);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        // reqEntity.addPart("user_id", new StringBody(otherParameter,chars));

    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
    }
    reqEntity.addPart("myFile", bab);

    httpPost.setEntity(reqEntity);

    // execute HTTP post request
    HttpResponse response;
    try {
        response = httpClient.execute(httpPost);
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                response.getEntity().getContent(), "UTF-8"));

        StringBuilder s = new StringBuilder();
        String sResponse;
        while ((sResponse = reader.readLine()) != null) {
            s = s.append(sResponse);
        }
        json = s.toString();

        System.out.println("Response.............: " + json);
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
         jObj = new JSONObject(json);
         Log.e("add emp with img Response", "> " + json.toString());
     } catch (JSONException e) {
         Log.e("JSON Parser", "Error parsing data " + e.toString());
     }

    return jObj;
}

}

Comments

1

Please try this code:

package com.secondhandbooks.http;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONObject;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

import com.secondhandbooks.util.ConvertStreamIntoString;
import com.secondhandbooks.util.SaveImageIntoDrawable;

public abstract class BaseAsync_Post extends AsyncTask<String, String, InputStream>
{

    Context context ;
    private HttpPost httppost;
    String url ;
    Dictionary<String, String> dictionary ;


    public BaseAsync_Post(String url , Dictionary<String, String> dictionary, Context context) {
        this.url = url ;
        this.dictionary = dictionary;
        this.context = context ;

        Enumeration<String> enumeration = dictionary.keys() ;


        showLogs("constructor") ;

        while ( enumeration.hasMoreElements() )
        {
            showLogs( enumeration.nextElement() ) ;
        }
    }

    @Override
    abstract protected void onPreExecute() ;
    @Override
    abstract protected void onPostExecute(InputStream result) ;

    @Override
    protected InputStream doInBackground(String... params) {
        // TODO Auto-generated method stub
        // TODO Auto-generated method stub
        InputStream is = null;

        HttpClient httpclient = new DefaultHttpClient();

        httppost = new HttpPost(url);

        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

        try 
        {   
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(50);

            Enumeration<String> enumeration = dictionary.keys() ;

            while ( enumeration.hasMoreElements() )
            {
                String key = enumeration.nextElement() ;

                if ( key.equals("file") )
                {
                    final File file = new File(SaveImageIntoDrawable.savedImagePath);

                    if ( file.isFile() )
                    {
                        showLogs("is file");
                    }
                    else
                    {
                        showLogs("no-file");
                    }

                    FileBody fb = new FileBody(file);
                    entity.addPart(key, fb);                        
                }
                else
                {
                    entity.addPart(key, new StringBody(dictionary.get(key)));
                }
            }

            httppost.setEntity(entity);

            HttpResponse response = httpclient.execute(httppost);

            HttpEntity entity1 = response.getEntity();

            BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity1);

            is = bufHttpEntity.getContent();

        } catch (ClientProtocolException e) {
            e.printStackTrace();
            showLogs("ClientProtocolException");
        } catch (IOException e) {
            e.printStackTrace();
            showLogs("IOException");
        }

        return is;
    }

    public String getString(JSONObject json, String TAG) {
        String returnParseData = "";

        try {
            Object aObj = json.get(TAG);
            if (aObj instanceof Boolean) {
                returnParseData = Boolean.toString(json.getBoolean(TAG));
            } else if (aObj instanceof Integer) {
                returnParseData = Integer.toString(json.getInt(TAG));
            } else if (aObj instanceof String) {
                returnParseData = json.getString(TAG);
            } else {
                returnParseData = json.getString(TAG);
            }
        } catch (Exception err) {
            err.printStackTrace();
            returnParseData = "";
        }

        return returnParseData;
    }

    public String getIntintoString(JSONObject json, String TAG) {
        int returnParseData = -1;

        try {
            returnParseData = json.getInt(TAG) ;
        } catch (Exception err) {
            err.printStackTrace();
            returnParseData = -1;
        }

        return Integer.toString(returnParseData) ;
    }

    public void showLogs ( String msg )
    {
        Log.e("HTTP-POST", msg) ;
    }

}

Comments

0

Try this simple code in your android, it works for me,

    String url = "";// URL where image has to be uploaded
    String fileName = ""; //path of file to be uploaded
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url);
    FileBody fileContent = new FiSystem.out.println("hello");
    StringBody comment = new StringBody("Filename: " + fileName);
    MultipartEntity reqEntity = new MultipartEntity();
    reqEntity.addPart("file", fileContent);
    httppost.setEntity(reqEntity);

    HttpResponse response = httpclient.execute(httppost);
    HttpEntity resEntity = response.getEntity();

Hope this helps you with your problem...!!!!!

3 Comments

not working.. just error when HttpResponse response is call... i debug that. its geting null
we have this below from server side <?php if (isset($_FILES['myFile'])) { // Example: move_uploaded_file($_FILES['myFile']['tmp_name'], "upload/" . $_FILES['myFile']['name']); echo 'successful'; } ?>
I have no knowledge of PHP code, Pls check with some php code this upload working or not

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.