多くの質問と回答を読んだ後、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 に 2 つの文字列を受け取りますが、FileBody(file) の影すらありません。$_FILE は null を返します。
正確には、httpcomponents-client-4.2.2-bin をダウンロードし、httpmime-4.2.2.jar を抽出しました。