在阅读了很多问题和答案后,我决定使用 MultipartEntity。这个答案一定是最好的: https ://stackoverflow.com/a/2937140/1388723
我已经实现了它:
private class SendImage extends AsyncTask<String, Void, Void> {
String sresponse;
@Override
protected Void doInBackground(String... params) {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(
"http://taras.xin.com.pl/loadimage.php");
InputStream in = null;
try {
MultipartEntity entity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
Log.i("MultyPart", params[0]);
File file = new File(params[0]);
Log.i("MultyPartFILE", file.toString());
ContentBody fb = new FileBody(file, "image/jpeg");
Log.i("MultyPartFB", fb.toString());
entity.addPart("text", new StringBody(
"This text was added to posrt"));
entity.addPart("word", new StringBody(
"This text was added to post"));
entity.addPart("file", fb);
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost,
localContext);
in = response.getEntity().getContent();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(in, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
in.close();
sresponse = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
return null;
}
@Override
protected void onPostExecute(Void result) {
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(sresponse);
}
});
super.onPostExecute(result);
}
}
和我的 loadimage.php:
<?php
var_dump($_POST);
var_dump($_FILE);
?>
我收到两个 $_POST 字符串,但 FileBody(file) 甚至没有影子。$_FILE 给出空值。
确切地说,我已经下载了 httpcomponents-client-4.2.2-bin,提取了 httpmime-4.2.2.jar。