/**
* 通过拼接的方式构造请求内容,实现参数传输以及文件传输
* @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请求的构建、服务器接口的设计以及文件的存储。多文件上传只是在单文件上传的基础上进行扩展,需要对每个文件进行同样的...
本文将详细讲解如何实现Android应用程序上传文件到FTP(File Transfer Protocol)服务器,包括单文件和多文件上传的实现方法。 首先,我们需要理解FTP的基本概念。FTP是一种用于在网络上进行文件传输的标准协议,...
总之,Android上传文件到.NET服务器涉及客户端与服务器端的交互,需要处理HTTP请求、文件读取和服务器接收等多个环节。通过上述代码示例和注意事项,您可以构建起一个基本的文件上传系统。但实际应用中,可能需要...
Android上传文件到服务器的方法 Android上传文件到服务器的方法是一种常见的功能,在 Android 应用程序中经常会遇到需要将文件上传到服务器的需求。因此,了解如何将文件上传到服务器对于 Android 开发人员非常重要...
在Android开发中,将文件上传到远程服务器是常见的任务,特别是在移动应用中处理用户数据、图片或音频文件时。本文将详细讲解如何使用HTTP协议在Android客户端实现文件上传,并涉及服务器端的相关设置。 首先,我们...
在Android应用开发中,文件上传是一项常见的功能,例如用户可能需要将照片、文档或音频文件发送到服务器进行存储或处理。本教程将详细介绍如何在Android客户端实现文件选择并上传至服务器,同时提供服务器端的处理...
Android上传文件通常涉及`Multipart/form-data`编码方式,这是HTTP协议中用于处理多部分数据的一种格式,常用于文件上传。通过在请求头设置`Content-Type: multipart/form-data`,然后将文件内容作为请求体的一部分...
在Android应用开发中,文件上传是一项常见的功能,通常用于向服务器发送用户生成的数据,如图片、音频或视频。本教程将详细介绍如何通过HTTP协议在Android客户端实现文件上传,并在服务器端使用Servlet进行处理。 ...
在Android应用开发中,有时需要将本地文件上传到服务器,以实现数据同步或者备份功能。在本场景中,我们讨论的是如何将Android设备上的文件上传到由C#编写的Web服务(WebService)。以下是对这个过程的详细解释: 1...
以上就是Android上传文件至服务器并提供客户端下载的基本流程和关键知识点。具体实现时,需要结合实际项目需求和所选技术栈进行调整。提供的源码可以帮助理解并实践这些步骤。在实际开发中,确保遵循最佳实践,提高...
本示例提供了一个完整的Android客户端文件上传到服务器的Demo,服务器端使用了流行的Java Web容器Tomcat。以下是关于这个过程涉及的关键知识点的详细解释。 1. **Android客户端上传文件**:在Android应用中,我们...
标题"Android-AndroidLog日志打印输出到文件方便查看和上传到服务器"所描述的,就是一种将Android应用的日志信息写入到本地文件的方法,以便后续分析或上传到远程服务器。这个方法能够帮助开发者在无法直接访问设备...
压缩文件包含了android端和web端,web端使用myeclipse8.5开发的,...具体实现了手机选择相册图片或者拍照能预览图片并将图片上传到服务器。发布到手机上测试可能需要手动在手机权限管理中打开摄像头和文件读写的权限。
本实例实现每隔5秒上传一次,通过服务器端获取手机上传过来的文件信息并做相应处理;采用Android+Struts2技术。 一、Android端实现文件上传 1)、新建一个Android项目命名为androidUpload,目录结构如下: 2)、...
理解如何有效地上传文件对于IT专业人士来说至关重要。 #### 1. 文件上传的基本概念 文件上传是指用户或程序通过网络将文件从本地设备传输到远程服务器的过程。这个过程中涉及到客户端(发起上传的一方)和服务器端...
在Android应用开发中,文件上传是一项常见的功能,例如用户可能需要上传照片、文档或音频到服务器进行存储或分享。为了实现这一功能,开发者通常会利用HTTP协议或者更现代的HTTPS协议,通过网络请求库(如Volley、...
在Android开发中,将多个文件上传到服务器是一项常见的任务,特别是在构建移动应用时,用户可能需要分享图片、视频或其他文档。本教程将深入探讨如何实现这个功能,主要针对使用Java编程语言和Apache服务器的情况。 ...
Android 多线程可断点续传上传文件至服务器Demo(Android端编辑器:Android Studio,服务器端编辑器:Eclipse,请注意手机默认下载目录必须要有t007.zip,服务器端必须有D:\temp\temp目录)