android之文件上传
文件上传
android中的文件上传使用的是post的提交方式。
通过httpwatcher抓一个文件上传时的包,可以更加好的明白下面的代码
//调用此方法时需要传递用户名,密码,文件路径
文件上传时,上传的内容一般分为两部分,一部分是普通字段,另一部分就是真正要上传的内容
下面通过注释对改程序的每行进行解释
android客户端代码:
public boolean upload(String username, String password, String filepath) throws Exception {
String boundary = "---------------------------7db1c523809b2"; // 分割线
File file = new File(filepath); // 要上传的文件
Uri uri = Uri.parse(address); // 用来解析主机名和端口
URL url = new URL(address); // 用来开启连接
StringBuilder sb = new StringBuilder(); // 用来拼装请求
// username字段
sb.append("--" + boundary + "\r\n");
sb.append("Content-Disposition: form-data; name=\"username\"" + "\r\n");
sb.append("\r\n");
sb.append(username + "\r\n");
// password字段
sb.append("--" + boundary + "\r\n");
sb.append("Content-Disposition: form-data; name=\"password\"" + "\r\n");
sb.append("\r\n");
sb.append(password + "\r\n");
// 文件部分
sb.append("--" + boundary + "\r\n");
sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + filepath + "\"" + "\r\n");
sb.append("Content-Type: application/octet-stream" + "\r\n");
sb.append("\r\n");
// 将开头和结尾部分转为字节数组,因为设置Content-Type时长度是字节长度
byte[] before = sb.toString().getBytes("UTF-8");
byte[] after = ("\r\n--" + boundary + "--\r\n").getBytes("UTF-8");
// 打开连接, 设置请求头
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(3000);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
conn.setRequestProperty("Content-Length", before.length + file.length() + after.length + "");
conn.setRequestProperty("HOST", uri.getHost() + ":" + uri.getPort()); // 192.168.1.100:8080
conn.setDoOutput(true);
// 获取输入输出流
OutputStream out = conn.getOutputStream();
FileInputStream fis = new FileInputStream(file);
// 将开头部分写出
out.write(before);
// 写出文件数据
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) != -1)
out.write(buf, 0, len);
// 将结尾部分写出
out.write(after);
fis.close();
out.close();
return conn.getResponseCode() == 200;
}
//javaweb服务器端代码,方便理解
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
System.out.println("POST:");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request); // 从request中解析出若干表单项
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) { // 遍历每一个表单项
FileItem item = iter.next();
if (item.isFormField()) { // 如果是普通字段
String fieldName = item.getFieldName(); // 获取字段名(name)
String value = item.getString(); // 获取字段值(value)
System.out.println(fieldName + " = " + value);
} else { // 不是普通字段, 就是上传文件
String fieldName = item.getFieldName(); // 获取字段名(name)
String fileName = new File(item.getName()).getName(); // 获取上传文件的文件名(有些浏览器可能会带着路径)
System.out.println(fieldName + " = " + fileName);
File uploadedFile = new File("F:/Upload", fileName); // 在Upload文件夹中创建文件
item.write(uploadedFile); // 写出数据
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("username = " + request.getParameter("username"));
System.out.println("password = " + request.getParameter("password"));
}
}
android之文件上传相关推荐
- 【Android】文件上传
Android实现文件上传(图片上传) http接口封装 文件上传工具类 页面调用处理 http接口封装 首先是根据自己选用的网络框架进行文件上传的接口封装 @Multipart@POST(" ...
- Android 实现文件上传功能(upload)
文 件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程 序上传文件的例子.这里只写出了Android部分的 ...
- android批量文件上传(android批量图片上传)
项目中多处用到文件批量上传功能,今天正好解决了此问题,在此写出来,以便日后借鉴. 首先,以下架构下的批量文件上传可能会失败或者不会成功:1.android客户端+springMVC服务端:服务端采用o ...
- Android开发文件上传格式,(android开发)使用okhttp上传文件
开发android手机客户端,常常会需要上传文件到服务器,比如:你手机里的照片. 使用okhttp会是一个很好的选择.它使用很简单,而且运行效率也很高. 首先,在 app/build.gradle 的 ...
- android多文件上传错误,微信多图上传解决android多图上传失败问题
微信提供了文件上传的方法wx.uploadFile来上传我们的图片 wx.chooseImage({ success: function(res) { var tempFilePaths = res. ...
- android http文件上传,Android Http文件上传方法和实践
文件上传在应用中是比较常用的的一种功能,比如用户的意见反馈功能.用户可以上传图片,音视频等文件,方便用户反馈问题的情况. 下来我将和大家一起梳理下需要掌握的知识,少走弯路一步到位,实现文件上传功能. ...
- php 上传sb2,基于标准的http来实现Android多文件上传
实现多文件的上传,基于标准的http来实现. 多文件上传MyUploader类的实现: /** * * 同步上传多个文件 * 基于标准的http实现,需要在非UI线程中调用,以免阻塞UI. * */ ...
- android多文件上传错误,在Android中上传大文件而不会出现内存错误
你尝试过使用过吗? con.setChunkedStreamingMode(1024); 这将帮助您将数据块化为特定大小,这样您就不必将整个文件保留在内存中. 更新: 尝试使用以下方法.我使用此方法上 ...
- android模拟器上传,电脑文件怎么传到夜神android模拟器 文件上传夜神模拟器
电脑传模拟器文件方法: 方法一: 直接拖拽电脑中任意文件到模拟器主界面中,即可跳出如图所示: 例:点击移动后变蓝色的窗口按钮直接点击打开手机文件夹按钮,在文件夹内安装或移动即可: 方法二: ①点击模拟 ...
最新文章
- 简明python教程 --C++程序员的视角(六):输入输出IO
- Boost:使用mapd_view类将数字数组映射到设备内存
- 敏捷个人:提供更多文档下载,并转载一篇敏捷个人读书笔记
- unity3d android 后台运行,unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android...
- arm7 键盘扫描程序
- Beta冲刺提交-星期五
- 容器技术Docker K8s 32 容器服务ACK基础与进阶-弹性伸缩
- chartControl控件常用属性总结
- PDCA过程模式在信息安全管理体系的应用
- 如果将网络工程师分级你是那个级别?
- 建立U盘免疫病毒文件
- 咦,我发现了微信的一个秘密
- 计算机网络中属于资源子网的是,属于计算机网络的资源子网
- 机器学习项目中不可忽视的一个密辛 - 大数定理、中心极限定理
- 【Seedlabs】Local DNS Attack Lab
- 神州优车粗暴裁员:人与人之间最起码的尊重呢?
- Web前端 学习笔记6(浮动)
- 思绪——关于《朝花夕誓——于离别之朝束起约定之花》
- 怎样使用快捷键在苹果Mac上强制退出应用程序?
- 离线安装docker-compose