Uploading an image to a webserver – Android/Java

Last week, I faced a problem to send an image to the server, I have tried a lot of ways, but seemed that nothing would work.

After some research, I found the HTTPClient API , this API helped me to do the dirty work, and it did pretty well. I will show you now, how to upload images and/or strings to the web server.

It’s pretty simple, actually. I gonna do in only one function!

 

// create a bitmap variable before anything;

private Bitmap bitmap;

// variable to set a name to the image into SD card;
// this variable, you have to put the path for the File, It's up to you;

public static String exsistingFileName;

// sendData is the function name, to call it, you can use something like sendData(null);
// remember to wrap it into a try catch;

public void sendData(String[] args) throws Exception {
	try {

		HttpClient httpClient = new DefaultHttpClient();
		HttpContext localContext = new BasicHttpContext();

		// here, change it to your php;

		HttpPost httpPost = new HttpPost("http://www.myURL.com/myPHP.php");
		MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
		bitmap = BitmapFactory.decodeFile(exsistingFileName);

		// you can change the format of you image compressed for what do you want;
		//now it is set up to 640 x 480;

		Bitmap bmpCompressed = Bitmap.createScaledBitmap(bitmap, 640, 480, true);
		ByteArrayOutputStream bos = new ByteArrayOutputStream();

		// CompressFormat set up to JPG, you can change to PNG or whatever you want;

		bmpCompressed.compress(CompressFormat.JPEG, 100, bos);
		byte[] data = bos.toByteArray();

		// sending a String param;

		entity.addPart("myParam", new StringBody("my value"));

		// sending a Image;
		// note here, that you can send more than one image, just add another param, same rule to the String;

		entity.addPart("myImage", new ByteArrayBody(data, "temp.jpg"));

		httpPost.setEntity(entity);
		HttpResponse response = httpClient.execute(httpPost, localContext);
		BufferedReader reader = new BufferedReader(new InputStreamReader( response.getEntity().getContent(), "UTF-8"));
		String sResponse = reader.readLine();

	} catch (Exception e) {

		Log.v("myApp", "Some error came up");

	}

}

 

And you should be good to go :)

This entry was posted in Android, Java and tagged , , , , , , . Bookmark the permalink.

6 Responses to Uploading an image to a webserver – Android/Java

  1. Rory O'Flaherty says:

    Hey! Thanks a million for the post on uploading an image to a webserver. Been searching for a while for something that details the process correctly. I’m currently trying to design an app that uploads an image file to a mysql database. I was wondering if i could ask you question or two, if you knew anything on it, or point me in the right direction it would be great.

    I’m trying to upload data (image file + text information), what is the best way of doing this i.e. could i send an array with the text and convert the image to base64 encoding and insert this into the array, or is there an easier and better way?

    Any help would be greatly appreciated!

    Thank you,

    Rory

    • Marcelo Duende says:

      Hey Rory,

      Actually, if you look at the line 38 of my code, you could see that I’m sending a String as well
      entity.addPart(“myParam”, new StringBody(“my value”)); Where “myParam” is the parameter name and “my value” is any text you want to save.
      So just change the “myParam” to your parameter name and you should be good to go!

      And yes, the better way to send it is to compress to a ByteArray before!

      Feel free to ask again if you want.

      Thanks.

  2. Daniel Souza says:

    Eai Marcelo..

    Estava procurando por isso faz um tempo..

    Como estou com um projeto web java e um sistema multiagente na mesma máquina web, eu posso fazer getServletContext.getRealPath(“/”) para eu salvar de um projeto externo diretamente no diretório do projeto web e para abrir também um arquivo dentro do diretório web..

    Você me trouxe uma das soluções que seria salvar dentro de um projeto web java..
    utilizando HttpPost e adicionar um Part para manipular isso dentro do servlet e salvar em um dado diretório..

    agora como faço para utilizar o File para abrir e ler um arquivo dentro de um diretório web?
    A classe File permite isso? Estou fazendo essas perguntas bobas porque não tentei ainda e nunca tive essa experiência de procurar abrir um arquivo que não seja local.. rsrs’

  3. Carlos says:

    Hi! Can you post the code of the file .PHP? I do not know how to build it.

    Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>