POST メソッドを使用してアップロードされた単純な Android ファイルを PHP サーバーに書き込むにはどうすればよいですか
7517 次
2 に答える
9
HttpComponentsをダウンロードして、Android プロジェクトに追加してください。POST メソッドでファイルをアップロードする場合は、Multipart を使用する必要があります。
private DefaultHttpClient mHttpClient;
public ServerCommunication() {
HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
mHttpClient = new DefaultHttpClient(params);
}
public void uploadUserPhoto(File image) {
try {
HttpPost httppost = new HttpPost("some url");
MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart("Title", new StringBody("Title"));
multipartEntity.addPart("Nick", new StringBody("Nick"));
multipartEntity.addPart("Email", new StringBody("Email"));
multipartEntity.addPart("Description", new StringBody(Settings.SHARE.TEXT));
multipartEntity.addPart("Image", new FileBody(image));
httppost.setEntity(multipartEntity);
mHttpClient.execute(httppost, new PhotoUploadResponseHandler());
} catch (Exception e) {
Log.e(ServerCommunication.class.getName(), e.getLocalizedMessage(), e);
}
}
private class PhotoUploadResponseHandler implements ResponseHandler {
@Override
public Object handleResponse(HttpResponse response)
throws ClientProtocolException, IOException {
HttpEntity r_entity = response.getEntity();
String responseString = EntityUtils.toString(r_entity);
Log.d("UPLOAD", responseString);
return null;
}
}
出典: Android SDK を使用したマルチパート リクエストの投稿
AsyncTask の例については、このチュートリアルもお読みください。AsyncTask のコーディングは少し難しくなりますが、これを使用しない場合、アプリはメイン スレッドでファイルをアップロードします。ファイルのアップロード中にアプリケーションがフリーズします。アップロードに 5 秒以上かかる場合、Android はアプリケーションが応答していないと言います。ファイルのダウンロード/アップロードに AsyncTask を使用すると、Android は新しいスレッドを作成し、アプリケーションはフリーズしません。
複数の AsyncTasks を使用する場合、Android は一度に 1 つずつ AsyncTasks を実行します。複数の AsyncTasks を同時に実行することはできませんが、ほとんどの場合、実行する必要はありません。
于 2013-01-19T19:24:40.163 に答える
-3
URL url = new URL("your url destination");
HttpURLConnection httpconn = (HttpURLConnection)url.openConnection();
httpconn.setRequestMethod("POST");
于 2013-01-19T19:38:03.617 に答える