代码非原创,fix了bug,完善的还是需要再思量:
/**
* 通过拼接的方式构造请求内容,实现参数传输以及文件传输
* @param actionUrl
* @param params
* @param files
* @return
* @throws IOException
*/
public 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){
int i = 0;
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"+(i++)+"\"; 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();
InputStream in = null;
if (res == 200) {
in = conn.getInputStream();
int ch;
StringBuilder sb2 = new StringBuilder();
while ((ch = in.read()) != -1) {
sb2.append((char) ch);
}
}
return in == null ? null : in.toString();
}
最简单的PHP测试代码:
if($_FILES){
foreach($_FILES as $v){
copy($v[tmp_name], $v[name]);
}
}
参考自 Android中发送Http请求实例(包括文件上传、servlet接收),修复了几个问题:
1 多文件上传 file"+(i++)+"
2 返回的错误
分享到:
相关推荐
在Android应用开发中,文件上传是一项常见的功能,例如用户可能需要将照片、文档或音频文件发送到服务器进行存储或处理。本教程将详细介绍如何在Android客户端实现文件选择并上传至服务器,同时提供服务器端的处理...
本文将深入探讨Android如何实现文件上传到服务器,并结合提供的`UploadTest`和`UploadExample`两个示例项目进行讲解。 1. **HTTP协议与文件上传** 文件上传通常基于HTTP或HTTPS协议,利用POST或PUT方法将文件数据...
在安卓平台上进行文件上传到服务器的操作是移动应用开发中的常见任务,这通常涉及到网络编程、HTTP请求以及数据处理等技术。下面将详细讲解这个过程涉及的知识点。 首先,我们需要了解安卓系统中的网络通信机制。...
在Android平台上,将文件上传至服务器是一项常见的任务,尤其在开发涉及用户数据交互的应用时。本教程将深入探讨如何实现这一功能,同时提供客户端和服务端的源码示例,特别关注多文件上传的处理。 首先,客户端...
在IT领域中,文件上传是一项非常常见的操作,它涉及到将本地计算机上的文件传输到远程服务器上。这一过程广泛应用于各种场景,比如网站开发、软件部署、数据备份等。理解如何有效地上传文件对于IT专业人士来说至关...
在Android平台上将文件上传到.NET服务器是一项常见的任务,涉及到客户端(Android)与服务器端(.NET)的交互。本文将详细讲解如何实现这一过程,并提供相关的代码示例。 首先,客户端(Android)需要使用HTTP或者...
在Android平台上,将文件上传至服务器是常见的任务,尤其在处理用户生成的图片、音频或视频内容时。本文将深入探讨如何实现这一功能,并提供关键知识点。 首先,我们需要理解网络请求的基本原理。在Android中,最...
4. **文件上传功能**:应用可能包含一个接口,允许用户触发日志文件的上传操作,这些文件可以通过HTTP请求发送到服务器。上传可能需要用户确认,以保护他们的隐私。 5. **权限管理**:由于涉及到读写外部存储和网络...
在Android应用开发中,文件上传是一项常见的功能,通常用于向服务器发送用户生成的数据,如图片、音频或视频。本教程将详细介绍如何通过HTTP协议在Android客户端实现文件上传,并在服务器端使用Servlet进行处理。 ...
本示例提供了一个完整的Android客户端文件上传到服务器的Demo,服务器端使用了流行的Java Web容器Tomcat。以下是关于这个过程涉及的关键知识点的详细解释。 1. **Android客户端上传文件**:在Android应用中,我们...
一、Android文件上传 1. 文件选择:在Android中,你可以使用`Intent.ACTION_GET_CONTENT`来启动系统文件选择器,让用户选择要上传的文件。 2. 文件读取:使用`java.io.File`类获取文件路径,然后用`java.io....
实现:将android文件通过服务端上传至服务器; 获取android本地文件,通过调用服务端后台代码进行文件上传。 只需要分别调用移动端uploadMultiFile()方法和服务端upload()方法。
以上就是安卓文件上传、下载、解压涉及的主要知识点。实际开发中,还需要考虑错误处理、网络状态、安全性等问题,确保用户体验流畅且数据安全。对于描述中提到的"部分代码功能进行参考学习",建议结合具体代码理解每...
4. **文件上传机制**:文件上传通常涉及将文件分割成多个数据块,然后通过网络发送到服务器。服务器需要接收这些数据块,重组为原始文件,并保存到硬盘上。同时,需要处理错误检测和恢复,以确保文件完整无损。 5. ...
本文将详细讲解如何实现Android应用程序上传文件到FTP(File Transfer Protocol)服务器,包括单文件和多文件上传的实现方法。 首先,我们需要理解FTP的基本概念。FTP是一种用于在网络上进行文件传输的标准协议,...
在Android开发中,将文件上传到远程服务器是常见的任务,特别是在移动应用中处理用户数据、图片或音频文件时。本文将详细讲解如何使用HTTP协议在Android客户端实现文件上传,并涉及服务器端的相关设置。 首先,我们...
在Android应用开发中,文件上传是一项常见的功能,例如用户可能需要上传照片、文档或音频到服务器进行存储或分享。为了实现这一功能,开发者通常会利用HTTP协议或者更现代的HTTPS协议,通过网络请求库(如Volley、...
在Android应用开发中,有时需要将本地文件上传到服务器,以实现数据同步或者备份功能。在本场景中,我们讨论的是如何将Android设备上的文件上传到由C#编写的Web服务(WebService)。以下是对这个过程的详细解释: 1...
在Android开发中,将录音文件上传到服务器是一项常见的任务,特别是在构建涉及音频交互的应用时。这个压缩包"安卓Andriod源码——录音上传到服务器,上传使用AsyncTask异步任务.zip"提供了一个实例,展示了如何实现...
在Android平台上,将文件上传至服务器并为其他客户端提供下载是一项常见的任务,尤其在移动应用开发中。这个过程涉及到客户端(Android设备)与服务器之间的数据交互,通常通过HTTP或HTTPS协议进行。本教程将深入...