/** * * * * @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(); }
相关推荐
7. **EntityUtils**:一个工具类,用于处理响应实体,如读取响应内容。例如: ```java String responseBody = EntityUtils.toString(response.getEntity()); ``` 8. **HttpContext**:提供了请求执行的上下文...
在Android开发中,有时我们需要将本地的文件上传到服务器,例如图片、音频或者视频等。在本实例中,我们将探讨如何使用Apache的HttpClient库来实现这个功能。HttpClient是一个强大的HTTP客户端,它允许开发者发送...
在Android客户端向Java服务器端上传文件的过程中,涉及到了多个关键的技术点和步骤,这包括了文件选择、HTTP请求、数据编码、服务器端处理等。以下将详细解释这些知识点。 1. **Android文件浏览器**:在Android应用...
文件上传通常涉及到网络请求,Android提供了多种方式来实现,如使用HttpURLConnection、HttpClient(已废弃)或第三方库如Volley、OkHttp等。以OkHttp为例,它是一个高效的HTTP客户端,支持异步和同步请求。创建一个...
在Android开发中,工具类(Utils Class)是程序员经常创建的一种辅助代码结构,用来封装一些通用功能,提高代码的复用性和可维护性。这里提到的"Android 封装的工具类"涵盖了几种关键的模块,包括网络请求、数据库...
综上所述,Android客户端上传图片到服务器的过程涉及网络编程、文件操作、HTTP请求和错误处理等多个环节,通过使用现代的库和工具,可以简化这些复杂性,提高开发效率。在实际项目中,还需要结合具体需求进行优化和...
首先,我们需要了解如何使用Android的HttpClient。在Android SDK中,`org.apache.http.impl.client.DefaultHttpClient`是主要的HttpClient实现。创建一个HttpClient实例后,你可以通过`HttpGet`或`HttpPost`对象来...
HttpClientUtil 是一个用于发送 HTTP 请求的工具类,主要支持 GET 和 POST 方法。它使用了 Apache HttpClient 库,这是一个强大的 Java 客户端编程工具包,用于处理 HTTP 协议。以下是对类中关键方法和概念的详细...
在Android开发中,HTTP通信是应用与服务器交互的重要方式之一,`Android HttpClient`库就是用于实现这一功能的工具。本文将深入探讨如何使用`Android HttpClient`进行HTTP请求,包括GET、POST、PUT和DELETE等常见...
在Android平台上,HttpClient是一个常用的库,用于执行HTTP请求来与Web服务器进行通信。...在这个"Android ...通过分析和使用它的源码,开发者可以学到如何处理网络异常、优化网络请求和构建高效的数据抓取工具。
这个工具类通常会使用Apache的 HttpClient 或者OkHttp库来实现对WebDAV服务器的通信。 3. **Jackrabbit**: Jackrabbit是Apache基金会的一个开源项目,它提供了一个全面的Java Content Repository (JCR) 实现,也...
尽管HttpClient在新版本的Android中已不被推荐,但理解其工作原理和使用方法对学习Android网络编程仍然有价值。同时,了解如何结合其他组件,如加速度计数据的处理和文件I/O,可以提升应用的综合功能。
"android上传文件jar"这个标题暗示我们这里涉及的是一个Android应用程序组件,它利用特定的库(jar文件)来处理文件上传到服务器的过程。描述中提到的"这个是android上传给服务器资源时需要的jar"进一步确认了这一点...
在这个实例中,我们使用了 `EntityUtils` 工具类来将响应实体转换为字符串,然后使用 `AlertDialog` 来显示响应数据。 关于 HttpClient 的使用,需要注意以下几点: 1. HttpClient 需要在 Android 项目中添加依赖...
服务器接收到请求后,通过Struts框架的Action类处理,使用Hibernate查询数据库验证信息。如果验证成功,服务器将生成一个包含会话ID的JSON响应,返回给客户端。客户端保存会话ID以进行后续的无状态请求。 在项目中...
在实际应用中,当我们需要同时发送普通参数和文件到服务器时,HttpClient是一个理想的选择,因为它支持多部分请求,这是上传文件所必需的。 在HTTP中,POST请求通常用于向服务器提交数据,包括表单数据、文件等。...
- 将选中的文件URI转换为实际路径,可以使用`DocumentsContract`类或者第三方库如`android-file Chooser`,然后读取文件内容并准备上传。 4. **安全性和性能优化**: - 数据传输时应采用HTTPS协议,确保数据的...
1. **文件上传**:通过`MultipartEntity`构建包含文件的POST请求,可以将本地文件上传到服务器。 2. **多部分表单数据**:在注册或登录等表单提交场景中,如果表单包含文件字段,`httpmime`能处理这些数据。 3. **...
在Android开发中,HttpClient是一个广泛使用的网络请求库,它允许应用程序与HTTP服务器进行通信,执行GET、POST等HTTP方法操作。HttpClient提供了丰富的功能,如设置请求头、处理Cookie、管理连接池等,使得网络请求...