Android: загрузка файла на страницу вместе с другими строками POST

Я пытаюсь загрузить изображение на страницу PHP вместе с другой информацией об изображении, чтобы страница PHP знала, что с ней делать. В настоящее время я ухожу с этим, используя это:

URL url = new URL("http://www.tagverse.us/upload.php?authcode="+WEB_ACCESS_CODE+"&description="+description+"&userid="+userId); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setDoOutput(true); connection.setRequestMethod("POST"); OutputStream os = connection.getOutputStream(); InputStream is = mContext.getContentResolver().openInputStream(uri); BufferedInputStream bis = new BufferedInputStream(is); int totalBytes = bis.available(); for(int i = 0; i < totalBytes; i++) { os.write(bis.read()); } os.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String serverResponse = ""; String response = ""; while((response = reader.readLine()) != null) { serverResponse = serverResponse + response; } reader.close(); bis.close(); 

Есть ли более элегантное решение для этого, помимо гибрида GET / POST? Мне кажется, что это небрежно, но для всех, кого я знаю, это вполне приемлемое решение. Если есть лучший способ сделать это, я был бы признателен, если бы он был направлен в правильном направлении. Благодаря!

PS: Я знаком с тем, как вы в нормальных условиях взаимодействуете со страницей PHP через POST:

 HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://www.tagverse.us/login.php"); try { List<NameValuePair> pairs = new ArrayList<NameValuePair>(); pairs.add(new BasicNameValuePair("authcode", WEB_ACCESS_CODE)); pairs.add(new BasicNameValuePair("username", username)); pairs.add(new BasicNameValuePair("password", password)); post.setEntity(new UrlEncodedFormEntity(pairs)); client.execute(post); } 

По сути, я хотел бы объединить эти два метода, но поскольку я работаю с объектом HttpURLConnection, а не с объектом HttpPost, это не так просто, как просто слияние двух.

Спасибо!

Вы можете попытаться взглянуть на ответ, который я добавил для этого аналогичного вопроса: https://stackoverflow.com/a/9003674/472747

Вот код:

 byte[] data = {10,10,10,10,10}; // better get this from a file or memory HttpClient httpClient = new DefaultHttpClient(); HttpPost postRequest = new HttpPost("server url"); ByteArrayBody bab = new ByteArrayBody(data, "image.jpg"); MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); reqEntity.addPart("image", bab); FormBodyPart bodyPart=new FormBodyPart("formVariableName", new StringBody("formValiableValue")); reqEntity.addPart(bodyPart); bodyPart=new FormBodyPart("formVariableName2", new StringBody("formValiableValue2")); reqEntity.addPart(bodyPart); bodyPart=new FormBodyPart("formVariableName3", new StringBody("formValiableValue3")); reqEntity.addPart(bodyPart); postRequest.setEntity(reqEntity); HttpResponse response = httpClient.execute(postRequest); BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line = null; while((line = in.readLine()) != null) { System.out.println(line); } часть byte[] data = {10,10,10,10,10}; // better get this from a file or memory HttpClient httpClient = new DefaultHttpClient(); HttpPost postRequest = new HttpPost("server url"); ByteArrayBody bab = new ByteArrayBody(data, "image.jpg"); MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); reqEntity.addPart("image", bab); FormBodyPart bodyPart=new FormBodyPart("formVariableName", new StringBody("formValiableValue")); reqEntity.addPart(bodyPart); bodyPart=new FormBodyPart("formVariableName2", new StringBody("formValiableValue2")); reqEntity.addPart(bodyPart); bodyPart=new FormBodyPart("formVariableName3", new StringBody("formValiableValue3")); reqEntity.addPart(bodyPart); postRequest.setEntity(reqEntity); HttpResponse response = httpClient.execute(postRequest); BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line = null; while((line = in.readLine()) != null) { System.out.println(line); } часть byte[] data = {10,10,10,10,10}; // better get this from a file or memory HttpClient httpClient = new DefaultHttpClient(); HttpPost postRequest = new HttpPost("server url"); ByteArrayBody bab = new ByteArrayBody(data, "image.jpg"); MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); reqEntity.addPart("image", bab); FormBodyPart bodyPart=new FormBodyPart("formVariableName", new StringBody("formValiableValue")); reqEntity.addPart(bodyPart); bodyPart=new FormBodyPart("formVariableName2", new StringBody("formValiableValue2")); reqEntity.addPart(bodyPart); bodyPart=new FormBodyPart("formVariableName3", new StringBody("formValiableValue3")); reqEntity.addPart(bodyPart); postRequest.setEntity(reqEntity); HttpResponse response = httpClient.execute(postRequest); BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line = null; while((line = in.readLine()) != null) { System.out.println(line); } часть byte[] data = {10,10,10,10,10}; // better get this from a file or memory HttpClient httpClient = new DefaultHttpClient(); HttpPost postRequest = new HttpPost("server url"); ByteArrayBody bab = new ByteArrayBody(data, "image.jpg"); MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); reqEntity.addPart("image", bab); FormBodyPart bodyPart=new FormBodyPart("formVariableName", new StringBody("formValiableValue")); reqEntity.addPart(bodyPart); bodyPart=new FormBodyPart("formVariableName2", new StringBody("formValiableValue2")); reqEntity.addPart(bodyPart); bodyPart=new FormBodyPart("formVariableName3", new StringBody("formValiableValue3")); reqEntity.addPart(bodyPart); postRequest.setEntity(reqEntity); HttpResponse response = httpClient.execute(postRequest); BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line = null; while((line = in.readLine()) != null) { System.out.println(line); }