android 文件上传的类--完整 可以直接被调用的
public class post {
// 如果是文本的文件的话那么通过map类传递进来如果是文件的话通过FormFile传递进来
public static String post(String actionUrl, Map<String, String> params,
FormFile[] files) throws IOException {
String BOUNDARY = "743520vjdk4e";
String MULTIPART_FROM_DATA = "multipart/form-data";
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();
// 这个地方使用了Map循环 map循环的方式需要注意一下了
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append("--");
sb.append(BOUNDARY);
// 回车换行
sb.append("\r\n");
sb.append("Content-Disposition:form-data:name\"" + entry.getKey()
+ "\r\n\r\n");
sb.append(entry.getValue());
sb.append("\r\n");
}
DataOutputStream outStream = new DataOutputStream(conn
.getOutputStream());
outStream.write(sb.toString().getBytes());
// 前面必须是数组才可以
// 发送文件数据
for (FormFile file : files) {
StringBuilder sb1 = new StringBuilder();
sb1.append("---");
sb1.append(BOUNDARY);
sb1.append("\r\n");
// 这个地方没有完
sb1.append("Content-Disposition:form-data:name=\""
+ file.getFormname());
sb1.append("Content-Type" + file.getContentType() + "\r\n\r\n");
outStream.write(sb1.toString().getBytes());
// 先判断formfile里面是否为空 如果不为空的话则写出 获取formfile的data里面的
if (file.getInStream() != null) {
// 提供流的的方式的话就是一边读一边写了
byte[] buffer = new byte[1024];
int len = 0;
while ((len = file.getInStream().read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
file.getInStream().close();
} else {
outStream.write(file.getData(), 0, file.getData().length);
}
outStream.write("\r\n".getBytes());
}
byte[] end_data = ("--" + BOUNDARY + "\r\n").getBytes();
outStream.write(end_data);
outStream.flush();
// 得到响应号码
int res = conn.getResponseCode();
if (res != 200)
throw new RuntimeException("请求失败 ");
InputStream in = conn.getInputStream();
int ch;
StringBuilder sb2 = new StringBuilder();
while ((ch = in.read()) != -1) {
sb.append((char) ch);
}
outStream.close();
conn.disconnect();
return in.toString();
}
这是相关联的formFIle类的定义
public class FormFile {
// 定义了使用的文件的特点
// 上传文件的数据
private byte[] data;
private InputStream inStream;
// 文件名称
private String fileName;
// 请求参数名称
private String Formnames;
// 内容类型
private String contentType = "application/octet-stream";
public FormFile(byte[] data, String fileName, String formnames,
String contentType) {
this.data = data;
this.fileName = fileName;
Formnames = formnames;
this.contentType = contentType;
}
public FormFile(InputStream inStream, String fileName, String formnames,
String contentType) {
this.inStream = inStream;
this.fileName = fileName;
Formnames = formnames;
this.contentType = contentType;
}
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
public InputStream getInStream() {
return inStream;
}
public void setInStream(InputStream inStream) {
this.inStream = inStream;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFormnames() {
return Formnames;
}
public void setFormnames(String formnames) {
Formnames = formnames;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
分享到:
相关推荐
Unity 调用Android文件资源管理器,可以选择Android手机上的图片,视频等一些列文件,并且获得相关的文件路径。直接导入Unity即可运行。测试已经通过
在Android应用开发中,调用相机...通过对这些代码的分析和学习,开发者可以更好地理解和掌握在Android应用中调用相机拍照的完整流程。同时,这个源码实例也可以作为开发过程中的参考,帮助解决实际项目中遇到的问题。
这里提到的“android文件上传控件”可能是一个预封装好的UI组件,它提供了一套完整的文件选择、上传进度显示以及错误处理的功能。这样的控件可以简化开发流程,避免重复造轮子。例如,Android开源库如Android-File-...
提到可以直接在Eclipse中运行,意味着项目是基于旧版本的Android SDK。Eclipse是早期常用的Android开发IDE,但现在更推荐使用Android Studio,因为它有更丰富的功能和更好的兼容性。 9. **Web服务器端处理**: ...
这个库通常被用于那些需要处理用户上传图片或需要进行图像编辑的应用场景。在本文中,我们将深入探讨TakePhoto库的核心功能、使用方法以及它如何帮助提升Android应用的用户体验。 1. **核心功能**: - **图片选择*...
【Android 文件上传详解】 在Android应用开发中,文件上传是一个常见的功能,比如用户分享图片、文档到社交媒体或者向服务器提交数据。"android-simpl3r-文件上传master.zip"项目提供了一个简单的示例,用于演示...
4. **文件上传功能**:应用可能包含一个接口,允许用户触发日志文件的上传操作,这些文件可以通过HTTP请求发送到服务器。上传可能需要用户确认,以保护他们的隐私。 5. **权限管理**:由于涉及到读写外部存储和网络...
在Android应用开发中,文件上传是一项常见的功能,例如用户可能需要将照片、文档或音频文件发送到服务器进行存储或处理。本教程将详细介绍如何在Android客户端实现文件选择并上传至服务器,同时提供服务器端的处理...
Android网络请求的统一封装和调用.集成了android-async-http, volley, okhttp3等网络请求框架.可直接切换底层库. 1 简介 架构分层 总共分为三层: 网络请求调用层. app统一调用该层接口和这层提供的回调,该层可以...
【uniapp调用原生Android SDK】和【uniapp调用原生IOS SDK】涉及到的是在跨平台开发框架uniapp中如何与原生系统进行深度交互的技术。uniapp是一个使用Vue.js开发的所有平台的统一解决方案,它允许开发者通过一套代码...
本文将详细讲解如何在Android应用中实现FTP的文件上传和下载功能,同时支持对文件夹的操作。 首先,我们需要了解FTP的基本概念。FTP是一种基于TCP的应用层协议,用于在网络上进行文件的传输。它定义了两个主要的...
在Android开发中,文件上传,特别是图片上传,是常见的需求之一。这涉及到用户选择本地文件,通常是图片,然后通过网络接口将这些文件发送到服务器。本文将深入探讨如何实现Android平台上的多文件和单文件上传,以及...
3. **文件传输**:部分版本可能还支持文件上传和下载功能,使得大量数据交换变得更加便捷。 4. **日志记录**:可以记录通信过程中的数据,便于后期分析和调试。 三、串口通信实现原理 Android-SerialPort-Tool主要...
本文将详细解析如何在Android系统中实现文件上传,主要围绕"Android文件上传"这一主题展开,结合提供的博客链接以及压缩包内的示例代码(test和struts2fileupload)进行说明。 首先,理解文件上传的基本流程至关...
描述中提到,该压缩包包含了一个可以直接在Android Studio环境下运行的示例项目,这将帮助开发者快速理解和学习如何使用百度的OCR SDK。通过这个SDK,开发者可以方便地实现图片到文字的转换,提高应用的功能性和用户...
这个名为"Android调用摄像头拍摄并上传视频源码.rar"的压缩包可能包含了一个完整的示例项目,用于演示如何实现这一过程。下面将详细解释这一过程中涉及的关键知识点。 1. **启动摄像头** Android提供了`android....
在Android应用开发中,文件上传是一项常见的功能,例如用户可能需要上传照片、文档或音频到服务器进行存储或分享。为了实现这一功能,开发者通常会利用HTTP协议或者更现代的HTTPS协议,通过网络请求库(如Volley、...
在Android平台上,开发高级应用时常会涉及到数据交互,如图片上传和文件上传。...通过分析和理解这份源码,开发者可以深入理解Android与服务器之间的数据传输机制,以及如何处理文件上传这类常见任务。
在Android开发中,文件上传是一项常见的任务,尤其是在构建应用程序时涉及到...`UploadTest`和`UploadExample`项目提供了实践参考,通过学习和理解这些示例,开发者可以更好地理解和实现Android应用中的文件上传功能。
在Android平台上,调用系统自带的录音机是开发者经常遇到的需求,这可以帮助用户方便地录制音频并集成到应用中。本文将深入探讨如何在Android应用中实现这一功能,并结合"AutoRecoder"这个示例来讲解相关知识点。 ...