我是靠谱客的博主 糊涂小海豚,最近开发中收集的这篇文章主要介绍Android HttpClient post MultipartEntity,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在Android 中使用HttpClient,MultipartEntity

为了发送图片,文件等资源,现在采用开源的org.apache.http.entity.mime.MultipartEntity

一.去官网http://hc.apache.org/downloads.cgi 下载

可以只下载binary,如果可能需要修改源文件的话,可以直接下载source.

二.导入jar包

将下载下来的httpcomponents-client-4.2.5-bin.zip取其httpcomponents-client-4.2.5-bin.ziphttpcomponents-client-4.2.5libhttpmime-4.2.5.jar包

将httpmime-4.2.5.jar包,放到android工程的lib目录下。

三. 查看jar包,

我这里用的是源文件,因为我需要修改些东西


三.使用

class MyAsyncTask extends AsyncTask<String, Integer, String> {

		String FORM_TABLE_NAME = "ask?action=Chatbottom-toSay-";// 自己需要配置的表单
		String filePath = "/mnt/sdcard/picture.jpg";// 测试写的文件路径,转换成自己的文件路径
		final String hostUrl = "http://www.myhost.com";// 写成自己要上传的地址

		@Override
		protected String doInBackground(String... params) {
			HttpClient httpclient = null;
			httpclient = new DefaultHttpClient();

			final HttpPost httppost = new HttpPost(hostUrl);
			final File imageFile = new File(filePath);
			final MultipartEntity multipartEntity = new MultipartEntity();

			if (false) {
				InputStream in = null;
				try {
					in = new FileInputStream(imageFile);
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
				InputStreamBody inputStreamBody = new InputStreamBody(in,
						"android_inputstream.jpg");
				// FormBodyPart formBodyPart = new FormBodyPart(FORM_TABLE_NAME,
				// contentBody);
				multipartEntity.addPart(FORM_TABLE_NAME, inputStreamBody);
			}
			if (false) {
				ContentBody contentBody = new FileBody(imageFile);
				FormBodyPart formBodyPart = new FormBodyPart(FORM_TABLE_NAME,
						contentBody);
				multipartEntity.addPart(formBodyPart);
			}
			if (false) {
				// FileBody fileBody = new FileBody(imageFile, "image/jpeg",
				// "utf-8");
				FileBody fileBody = new FileBody(imageFile);
				multipartEntity.addPart(FORM_TABLE_NAME, fileBody);
			}

			if (true) {
				Bitmap photoBM = BitmapFactory.decodeFile(filePath);
				if (photoBM == null) {
					return null;
				}
				ByteArrayOutputStream photoBao = new ByteArrayOutputStream();
				boolean successCompress = photoBM.compress(CompressFormat.JPEG,
						80, photoBao);
				if (!successCompress) {
					return null;
				}
				ByteArrayBody byteArrayBody = new ByteArrayBody(
						photoBao.toByteArray(), "android.jpg");
				photoBM.recycle();
				// InputStreamBody inbody = new InputStreamBody(new InputStream,
				// filename);
				multipartEntity.addPart(FORM_TABLE_NAME, byteArrayBody);
			}

			httppost.setEntity(multipartEntity);

			HttpResponse httpResponse;
			try {
				httpResponse = httpclient.execute(httppost);

				final int statusCode = httpResponse.getStatusLine()
						.getStatusCode();

				String response = EntityUtils.toString(
						httpResponse.getEntity(), HTTP.UTF_8);
				IWLog.d("got response:n" + response);

				if (statusCode == HttpStatus.SC_OK) {
					return "success";
				}

			} catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (httpclient != null) {
					httpclient.getConnectionManager().shutdown();
					httpclient = null;
				}
			}
			return null;

		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			if (result.equals("success")) {

			}
		}

	}

四.与HttpURLConnection比较

网上好多人都用的是HttpURLConnection来上传图片,文件。由于我在解决实际问题时HttpURLConnection并不能达到预期,老是死在urlConnection.getInputStream()永远回不来。所以不得以改用的上面的库。最终感觉MultipartEntity用起来比较简单。

附:

在解决实际问题中,我也不是一帆风顺,也遇到了各种抽象的问题。推荐给大家个工具wireshark工具,用于抓取网络协议用的。很有帮助

最后

以上就是糊涂小海豚为你收集整理的Android HttpClient post MultipartEntity的全部内容,希望文章能够帮你解决Android HttpClient post MultipartEntity所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部