Http协议上传文件-Socket
来源:互联网 发布:淘宝客服全职招聘骗局 编辑:程序博客网 时间:2024/06/05 15:21
/**
*
* 转载请标明出处:http://blog.csdn.net/u013598111/article/details/51440346
* @author:【JunTao_sun】
*
*
*/
小文件上传
public class Network_One {//.*( 二进制流,不知道下载文件类型)application/octet-stream private static final String TAG = "uploadFile"; private static final int TIME_OUT = 5*1000; //超时时间 private static final String CHARSET = "UTF-8"; //设置编码 public static void fileUpLoad(Map<String, String> params,String fileUrl, String filePath,Context mContext,String fileName ) { String BOUNDARY = UUID.randomUUID().toString(); //边界标识 随机生成 String CONTENT_TYPE = "multipart/form-data"; //内容类型 try { StringBuilder sb = new StringBuilder(); /** * 普通的表单数据 */ for (String key : params.keySet()) { sb.append("--" + BOUNDARY + "\r\n"); sb.append("Content-Disposition: form-data; name=\"" + key + "\"" + "\r\n"); sb.append("\r\n"); sb.append(params.get(key) + "\r\n"); } File file=new File(filePath); if(!file.exists()) return; /** * 上传文件的头 */ sb.append("--" + BOUNDARY + "\r\n"); sb.append("Content-Disposition: form-data; name=\""+fileName + "\"; filename=\"" + fileName+ "\"" + "\r\n"); sb.append("Content-Type: image/jpeg" + "\r\n"); sb.append("\r\n"); byte[] headerInfo=sb.toString().getBytes("UTF-8");byte[] endInfo=("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8"); URL url = new URL(fileUrl);HttpURLConnection conn=(HttpURLConnection) url.openConnection(); conn.setReadTimeout(TIME_OUT); conn.setConnectTimeout(TIME_OUT); conn.setDoInput(true); //允许输入流 conn.setDoOutput(true); //允许输出流 conn.setUseCaches(false); //不允许使用缓存 conn.setRequestMethod("POST"); //请求方式 conn.setRequestProperty("Charset", CHARSET); //设置编码 conn.setRequestProperty("connection", "keep-alive"); conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY); conn.setRequestProperty("Content-Length", String .valueOf(headerInfo.length + file.length() + endInfo.length)); if(filePath!=null) { /** * 当文件不为空,把文件包装并且上传 */ OutputStream dos = conn.getOutputStream(); InputStream is=new FileInputStream(file); dos.write(headerInfo); byte[] bytes = new byte[1024]; int len = 0; while((len=is.read(bytes))!=-1) { dos.write(bytes, 0, len); } is.close(); dos.write(endInfo); dos.flush(); /** * 获取响应码 200=成功 * 当响应成功,获取响应的流 */ int res = conn.getResponseCode(); dos.close(); conn.disconnect(); }} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
下面是利用socket 用流的方式上传比较大的文件 :
请求失败 400 的话就是客服端问题,检查请求头的格式,是否有写错的地方。
public static void BigUploader(Map<String, String> params,String fileUrl, String filePath,Context mContext,String fileName ){ String BOUNDARY = UUID.randomUUID().toString(); //边界标识 随机生成 StringBuilder sb = new StringBuilder(); for (String key : params.keySet()) { sb.append("--" + BOUNDARY + "\r\n"); sb.append("Content-Disposition: form-data; name=\"" + key + "\"" + "\r\n"); sb.append("\r\n"); sb.append(params.get(key) + "\r\n"); } File file=new File(filePath); Log.e("文件是否存在", file.exists()+"");// if(!file.exists()) return; /** * 上传文件的头 */ sb.append("--" + BOUNDARY + "\r\n"); sb.append("Content-Disposition: form-data; name=\""+file.getName() + "\"; filename=\"" + file.getName()+ "\"" + "\r\n"); sb.append("Content-Type: image/jpeg" + "\r\n"); sb.append("\r\n"); try { byte[] headerInfo=sb.toString().getBytes("UTF-8");byte[] endInfo=("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8"); URLurl = new URL(fileUrl);int port=url.getPort()==-1?80:url.getPort();Socket socket= new Socket(InetAddress.getByName(url.getHost()),port);//SocketAddress dest = new InetSocketAddress(url.getHost(), url.getPort());//socket.connect(dest);OutputStream out=socket.getOutputStream(); PrintStream ps = new PrintStream(out, true, "UTF-8");// 写出请求头ps.println("POST " + url.getPath() + " HTTP/1.1");ps.println("Accept-Language: zh-CN"); ps.println("Content-Type: multipart/form-data; boundary=" + BOUNDARY);ps.println("Content-Length: "+ String.valueOf(headerInfo.length + file.length()+ endInfo.length));ps.println("Accept: text/html, application/xhtml+xml, application/xml, */*");ps.println("Host:"+url.getHost()+":"+url.getPort()); ps.println("Connection:keep-Alive");out.write("\r\n".getBytes("UTF-8"));out.write(headerInfo);int len;byte[] buffer=new byte[1024];FileInputStream input =new FileInputStream(file);while ((len=input.read(buffer))!=-1) {out.write(buffer,0,len);}out.write(endInfo);//out.flush();BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); Log.e(TAG, reader.readLine()); Log.e(TAG, reader.readLine()); Log.e(TAG, reader.readLine()); Log.e(TAG, reader.readLine()+); Log.e(TAG, "succeed-uploader");input.close();ps.close();socket.close();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}
0 0
- Http协议上传文件-Socket
- Http协议格式——socket实现http文件上传
- socket实现http文件上传
- 通过 http 协议上传文件
- 通过 http 协议上传文件
- 通过HTTP协议上传文件
- http协议 文件上传 POST
- 通过 http 协议上传文件
- 通过HTTP协议上传文件
- 通过HTTP协议上传文件
- 通过HTTP协议上传文件
- 通过 http 协议上传文件
- 通过 http 协议上传文件
- 通过 http 协议上传文件
- vc++ socket http协议post方法上传(分块上传)
- vc++ socket http协议post方法上传(分块上传)
- JAVA用Socket模拟HTTP文件上传
- 用Socket实现HTTP文件上传
- 学习笔记:从ListView和Adapter到RecyclerView
- Linux测试部门常用的指令
- javascript解析机制
- 【卷积神经网络-进化史】从LeNet到AlexNet
- Linux Eclipse C/C++ 报错 launch failed
- Http协议上传文件-Socket
- 线程 implements Runnable & 线程睡眠
- Request的getParameter和getAttribute方法的区别
- effective objective-c 2.0 笔记 第五章 :内存管理
- 产品经理需要这样几个好习惯
- python匹配ip正则
- 八人过河的状态空间搜索方法
- Python 代码性能优化
- 波特率跟比特率或者传码率跟传信率的区别