我如何编写一个使用 POST 方法上传到 PHP 服务器的简单 Android 文件
问问题
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;
}
}
另请阅读本教程以获取 AsyncTask 示例。AsyncTask 编码有点困难,但如果您不使用它,您的应用程序将在主线程中上传文件。您的应用程序将在上传文件时冻结,如果超过 5 秒 Android 会说您的应用程序没有响应。如果您使用 AsyncTask 下载/上传文件,Android 会创建一个新线程并且您的应用程序不会冻结。
请注意,如果您使用多个 AsyncTasks,Android 将同时执行一个 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 回答