BACKGROUND
This is, by no means, the only way to accomplish this transaction; check Google for alternate implementations. For this implementation there are: Pros: reduced lines of code, small dependency storage footprint, it works. Cons: dependencies not included in Android SDK release. Also, this is a simple code example that could be enhanced/refined significantly.
private Boolean uploadItem(String albumUrl, String filePath) { //Create the HttpClient, then the POST HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(albumUrl); //Specify the request method httpPost.addHeader("X-Gallery-Request-Method", "post"); //Specify the request key: (_prefs == reference to shared preferences) httpPost.addHeader("X-Gallery-Request-Key", _prefs.getString("API_KEY", "")); //Multipart; pay particular attention to the BROWSER_COMPATIBLE MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); //The file we will be uploading File upFile = new File(filePath); try { //Create a JSON object to be used in the StringBody JSONObject jsonObj = new JSONObject(); //Add some values jsonObj.put("name", upFile.getName()); jsonObj.put("type", "photo"); //Add the JSON "part" mpEntity.addPart("entity", new StringBody(jsonObj.toString())); } catch (JSONException je) { Log.v(TAG, je.getMessage()); } catch (UnsupportedEncodingException ue) { Log.v(TAG, ue.getMessage(); } //The file body, eventually added to the multipart entity FileBody fBody = new FileBody(upFile); //Add the part mpEntity.addPart("file", fBody); //Set the entity httpPost.setEntity(mpEntity); try { //Execute the request "POST" HttpResponse httpResp = httpClient.execute(httpPost); //Check the status code, in this case "created" if(response.getStatusLine().getStatusCode() == HttpStatus.SC_CREATED) return true; } catch (Exception e) //General; more specific ClientProtocolException & IOException { Log.v(TAG, e.getMessage()); } //Throw, return false..either way, we failed return false; }