`
仍唱我的歌
  • 浏览: 5567 次
  • 来自: 贵阳
社区版块
存档分类
最新评论

Android上传文件到服务器(不使用httpclient工具类)

 
阅读更多
/**
	 * 
	 * 
	 * 
	 * @param actionUrl
	 *            请求上传的服务器地址
	 * @param params
	 *            普通表单字段的name与value
	 * @param files
	 *            文件字段文件名与文件
	 * @return
	 * 
	 * @throws IOException
	 */

	private static String post(String actionUrl, Map<String, String> params, Map<String, File> files) throws IOException {

		String BOUNDARY = java.util.UUID.randomUUID().toString();
		String PREFIX = "--", LINEND = "\r\n";
		String MULTIPART_FROM_DATA = "multipart/form-data";
		String CHARSET = "UTF-8";

		URL uri = new URL(actionUrl);
		HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
		conn.setReadTimeout(5 * 1000); // 缓存的最长时间
		conn.setDoInput(true);// 允许输入
		conn.setDoOutput(true);// 允许输出
		conn.setUseCaches(false); // 不允许使用缓存
		conn.setRequestMethod("POST");
		conn.setRequestProperty("connection", "keep-alive");
		conn.setRequestProperty("Charsert", "UTF-8");
		conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);

		// 首先组拼文本类型的参数
		StringBuilder sb = new StringBuilder();
		for (Map.Entry<String, String> entry : params.entrySet()) {
			sb.append(PREFIX);
			sb.append(BOUNDARY);
			sb.append(LINEND);
			sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);
			sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
			sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
			sb.append(LINEND);
			sb.append(entry.getValue());
			sb.append(LINEND);
		}

		DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
		outStream.write(sb.toString().getBytes());
		// 发送文件数据
		if (files != null)
			for (Map.Entry<String, File> file : files.entrySet()) {
				StringBuilder sb1 = new StringBuilder();
				sb1.append(PREFIX);
				sb1.append(BOUNDARY);
				sb1.append(LINEND);
				sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getKey() + "\"" + LINEND);
				sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);
				sb1.append(LINEND);
				outStream.write(sb1.toString().getBytes());

				InputStream is = new FileInputStream(file.getValue());
				byte[] buffer = new byte[1024];
				int len = 0;
				while ((len = is.read(buffer)) != -1) {
					outStream.write(buffer, 0, len);
				}

				is.close();
				outStream.write(LINEND.getBytes());
			}

		// 请求结束标志
		byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
		outStream.write(end_data);
		outStream.flush();
		// 得到响应码
		int res = conn.getResponseCode();
		StringBuilder sb2 = new StringBuilder();
		if (res == 200) {
			InputStream in = conn.getInputStream();
			int ch;
			while ((ch = in.read()) != -1) {
				sb2.append((char) ch);
			}
		}
		outStream.close();
		conn.disconnect();
		return sb2.toString();
	}

 

分享到:
评论

相关推荐

    Android HttpClient工具类

    7. **EntityUtils**:一个工具类,用于处理响应实体,如读取响应内容。例如: ```java String responseBody = EntityUtils.toString(response.getEntity()); ``` 8. **HttpContext**:提供了请求执行的上下文...

    Android使用HttpClient上传文件到服务器完整实例

    在Android开发中,有时我们需要将本地的文件上传到服务器,例如图片、音频或者视频等。在本实例中,我们将探讨如何使用Apache的HttpClient库来实现这个功能。HttpClient是一个强大的HTTP客户端,它允许开发者发送...

    android客户端向java服务器端上传文件(完整版)

    在Android客户端向Java服务器端上传文件的过程中,涉及到了多个关键的技术点和步骤,这包括了文件选择、HTTP请求、数据编码、服务器端处理等。以下将详细解释这些知识点。 1. **Android文件浏览器**:在Android应用...

    android文件上传控件

    文件上传通常涉及到网络请求,Android提供了多种方式来实现,如使用HttpURLConnection、HttpClient(已废弃)或第三方库如Volley、OkHttp等。以OkHttp为例,它是一个高效的HTTP客户端,支持异步和同步请求。创建一个...

    Android 封装的工具类

    在Android开发中,工具类(Utils Class)是程序员经常创建的一种辅助代码结构,用来封装一些通用功能,提高代码的复用性和可维护性。这里提到的"Android 封装的工具类"涵盖了几种关键的模块,包括网络请求、数据库...

    android客户端上传图片到服务器的简单实现

    综上所述,Android客户端上传图片到服务器的过程涉及网络编程、文件操作、HTTP请求和错误处理等多个环节,通过使用现代的库和工具,可以简化这些复杂性,提高开发效率。在实际项目中,还需要结合具体需求进行优化和...

    Android HttpClient与Json解析

    首先,我们需要了解如何使用Android的HttpClient。在Android SDK中,`org.apache.http.impl.client.DefaultHttpClient`是主要的HttpClient实现。创建一个HttpClient实例后,你可以通过`HttpGet`或`HttpPost`对象来...

    android httpclient demo

    在Android开发中,HTTP通信是应用与服务器交互的重要方式之一,`Android HttpClient`库就是用于实现这一功能的工具。本文将深入探讨如何使用`Android HttpClient`进行HTTP请求,包括GET、POST、PUT和DELETE等常见...

    http请求工具类HttpClientUtil,get,post请求(csdn)————程序.pdf

    HttpClientUtil 是一个用于发送 HTTP 请求的工具类,主要支持 GET 和 POST 方法。它使用了 Apache HttpClient 库,这是一个强大的 Java 客户端编程工具包,用于处理 HTTP 协议。以下是对类中关键方法和概念的详细...

    Android HttpClient源码

    在Android平台上,HttpClient是一个常用的库,用于执行HTTP请求来与Web服务器进行通信。...在这个"Android ...通过分析和使用它的源码,开发者可以学到如何处理网络异常、优化网络请求和构建高效的数据抓取工具。

    android webdav工具类

    这个工具类通常会使用Apache的 HttpClient 或者OkHttp库来实现对WebDAV服务器的通信。 3. **Jackrabbit**: Jackrabbit是Apache基金会的一个开源项目,它提供了一个全面的Java Content Repository (JCR) 实现,也...

    Android HttpClientDemo

    尽管HttpClient在新版本的Android中已不被推荐,但理解其工作原理和使用方法对学习Android网络编程仍然有价值。同时,了解如何结合其他组件,如加速度计数据的处理和文件I/O,可以提升应用的综合功能。

    android上传文件jar

    "android上传文件jar"这个标题暗示我们这里涉及的是一个Android应用程序组件,它利用特定的库(jar文件)来处理文件上传到服务器的过程。描述中提到的"这个是android上传给服务器资源时需要的jar"进一步确认了这一点...

    android:通过httpclient向网络端获取数据的精短小实例

    在这个实例中,我们使用了 `EntityUtils` 工具类来将响应实体转换为字符串,然后使用 `AlertDialog` 来显示响应数据。 关于 HttpClient 的使用,需要注意以下几点: 1. HttpClient 需要在 Android 项目中添加依赖...

    android客户端与后台服务器交互

    服务器接收到请求后,通过Struts框架的Action类处理,使用Hibernate查询数据库验证信息。如果验证成功,服务器将生成一个包含会话ID的JSON响应,返回给客户端。客户端保存会话ID以进行后续的无状态请求。 在项目中...

    HttpClient通过Post上传文件的实例代码

    在实际应用中,当我们需要同时发送普通参数和文件到服务器时,HttpClient是一个理想的选择,因为它支持多部分请求,这是上传文件所必需的。 在HTTP中,POST请求通常用于向服务器提交数据,包括表单数据、文件等。...

    Android客户端与服务器端的json数据交互(内含大量知识点)

    - 将选中的文件URI转换为实际路径,可以使用`DocumentsContract`类或者第三方库如`android-file Chooser`,然后读取文件内容并准备上传。 4. **安全性和性能优化**: - 数据传输时应采用HTTPS协议,确保数据的...

    安卓httpclient用到的两个包

    1. **文件上传**:通过`MultipartEntity`构建包含文件的POST请求,可以将本地文件上传到服务器。 2. **多部分表单数据**:在注册或登录等表单提交场景中,如果表单包含文件字段,`httpmime`能处理这些数据。 3. **...

    HttpClient

    在Android开发中,HttpClient是一个广泛使用的网络请求库,它允许应用程序与HTTP服务器进行通信,执行GET、POST等HTTP方法操作。HttpClient提供了丰富的功能,如设置请求头、处理Cookie、管理连接池等,使得网络请求...

Global site tag (gtag.js) - Google Analytics