Http一次上传多个文件(类型可以不同)的方式
来源:互联网 发布:mac充电慢 编辑:程序博客网 时间:2024/05/17 16:55
Http上传中Header信息内要指定ContentType以告知浏览器你所上传的文件类型,如果需要在一次request中上传多个文件(甚至可以是多种文件类型),就可以使用CONTENT_TYPE = "multipart/form-data"这种混编格式来完成,具体做法可以参照示例代码,而相关的介绍则可以参看:
关于混编格式
multipart/form-data官方介绍
关于Java UUID
关于混编格式
multipart/form-data官方介绍
关于Java UUID
package com.example.pmudemo.helper;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.UUID;import android.util.Log;/** * Message upload helper class * * @author weishijie * */public class UploadHelper {private static final String TAG = "UploadHelper";/** * Timeout */private static final int TIME_OUT = 5 * 1000;/** * Charset */private static final String CHARSET = "utf-8";/** * Upload file to server * 本方法采用“混编格式”实现上传 * 混编格式,即混合多种资料格式并一次传送,当然非文字资料必须要编码为二进制字符串 * 参考:http://www.cnblogs.com/shanyou/archive/2013/06/07/3123155.html * * @param file file need to upload * @param RequestURL request url * @return response string */public static String uploadFile(File file, String requestURL){String result = null;/*UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空(3240年)中的所有机器都是唯一的。UUID一般形如下例:550E8400-E29B-11D4-A716-446655440000*/// 边界标识 随机生成String BOUNDARY = UUID.randomUUID().toString();String PREFIX = "--";String LINE_END = "\r\n";String CONTENT_TYPE = "multipart/form-data";try{URL url = new URL(requestURL);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setReadTimeout(TIME_OUT);conn.setConnectTimeout(TIME_OUT);// Allow inputconn.setDoInput(true);// Allow outputconn.setDoOutput(true);// Forbidden cacheconn.setUseCaches(false);conn.setRequestMethod("POST");// Set request header fieldconn.setRequestProperty("Charset", CHARSET);conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary="+ BOUNDARY);if (file != null){/** * 当文件不为空,把文件包装并且上传 */DataOutputStream dos = new DataOutputStream(conn.getOutputStream());StringBuffer sb = new StringBuffer();sb.append(PREFIX);sb.append(BOUNDARY);sb.append(LINE_END);/** * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 * filename是文件的名字,包含后缀名的 比如:abc.png */sb.append("Content-Disposition: form-data; name=\"log\"; filename=\""+ file.getName() + "\"" + LINE_END);sb.append("Content-Type: application/octet-stream; charset="+ CHARSET + LINE_END);sb.append(LINE_END);dos.write(sb.toString().getBytes());InputStream is = new FileInputStream(file);byte[] bytes = new byte[1024];int len = 0;while ((len = is.read(bytes)) != -1){dos.write(bytes, 0, len);}is.close();dos.write(LINE_END.getBytes());byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes();dos.write(end_data);dos.flush();/** * 获取响应码 200=成功 当响应成功,获取响应的流 */int res = conn.getResponseCode();Log.i(TAG, "response code:" + res);Log.i(TAG, "request success");InputStream input = conn.getInputStream();StringBuffer sb1 = new StringBuffer();int ss;while ((ss = input.read()) != -1){sb1.append((char) ss);}result = sb1.toString();Log.i(TAG, "result : " + result);}else{return null;}} catch (MalformedURLException e){e.printStackTrace();return null;} catch (IOException e){e.printStackTrace();return null;} catch (Exception e){e.printStackTrace();return null;}return result;}}
0 0
- Http一次上传多个文件(类型可以不同)的方式
- JSP文件上传(一次可以上传多个文件)
- 一次上传多个文件
- 一次上传多个文件
- 解决<input type=“file” multiple> 多文件上传问题(可以多次选取文件,也可以一次选取多个文件),而且点击的是一个同一个div
- 一次选择多个文件上传的解决方案
- c#一次上传多个文件的写法
- AFNetworking 一次上传多个文件的方法
- 一次同时上传多个文件
- asp一次选择多个文件上传
- 使用 PHP 一次上传多个文件
- jQuery fileupload 一次上传多个文件
- struts2+hibernate上传name值不同的多个文件
- WEB版一次选择多个文件进行批量上传(swfupload)的解决方案 上传多文件
- 一次上传400个文件的上传组件 附源代码
- 当使用dbeaver导出多个sql文件,怎么快速的把它合并成一个文件,可以针对多种不同的类型
- 基于HTTP协议的多个文件上传
- Spring文件上传,包括一次选中多个文件
- 名词解析
- Google Map无法显示:Error contacting Google servers. XXX authentication issue
- 命令安装VS
- Webservice 概念
- 软件架构设计---基于鲁棒图进行设计
- Http一次上传多个文件(类型可以不同)的方式
- 使用IConfigurationSectionHandler在web.config中增加自定义配置
- Sprint回顾大揭秘——“宝典”来了
- XML工具类DOMUtil
- 为了快一点,我们却要慢一点。
- Android图片压缩(质量压缩和尺寸压缩)
- 网络虚拟(包括overlay、underlay介绍)
- Sprint评审会议不是Sprint演示会议
- mysql数据库设计原则(三范式)