java模拟form上传数据
Java模拟form表单上传
查看form表单提交的http请求为
- import java.io.*;
- import java.net.*;
- public class FileUpload {
- /**
- * 模拟form表单的形式 ,上传文件 以输出流的形式把文件写入到url中,然后用输入流来获取url的响应
- * @param url 请求地址 form表单url地址
- * @param filePath 文件在服务器保存路径
- * @return String url的响应信息返回值
- * @throws IOException
- */
- public String send(String url, String filePath) throws IOException {
- String result = null;
- File file = new File(filePath);
- if (!file.exists() || !file.isFile()) {
- throw new IOException("文件不存在");
- }
- /**
- * 第一部分
- */
- URL urlObj = new URL(url);
- // 连接
- HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
- /**
- * 设置关键值
- */
- con.setRequestMethod("POST"); // 请求方式
- con.setDoInput(true);
- con.setDoOutput(true); // 当为post方式时,需要设置,因为要输入数据流
- con.setUseCaches(false); // post方式不能使用缓存
- // 设置请求头信息
- con.setRequestProperty("Connection", "Keep-Alive");
- con.setRequestProperty("Charset", "UTF-8");
- // 设置边界
- String BOUNDARY = "----------" + System.currentTimeMillis();
- con.setRequestProperty("Content-Type", "multipart/form-data; boundary="+ BOUNDARY);
- // 请求正文信息
- // 需要提交的文件
- StringBuilder sb = new StringBuilder();
- sb.append("--"+BOUNDARY+"\r\n");
- sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");
- sb.append("Content-Type:application/octet-stream\r\n\r\n");
- byte[] head = sb.toString().getBytes("utf-8");
- // 获得输出流
- OutputStream out = new DataOutputStream(con.getOutputStream());
- // 输出表头
- out.write(head);
- // 文件正文部分
- // 把文件已流文件的方式 推入到url中
- DataInputStream in = new DataInputStream(new FileInputStream(file));
- int bytes = 0;
- byte[] bufferOut = new byte[1024];
- while ((bytes = in.read(bufferOut)) != -1) {
- out.write(bufferOut, 0, bytes);
- }
- in.close();
- // 需要提交的普通表单数据
- sb = new StringBuilder();
- sb.append("\r\n--"+BOUNDARY+"\r\n");
- sb.append("Content-Disposition: form-data;name=\"type\"\r\n\r\n");// 注意:在设置数据头 与 数据内容是 中间是隔了一行
- sb.append("1\r\n");
- sb.append("--"+BOUNDARY+"\r\n");
- sb.append("Content-Disposition: form-data;name=\"wxroleid\"\r\n\r\n");
- sb.append("201\r\n");
- head = sb.toString().getBytes("utf-8");
- out.write(head);
- // 结尾部分
- byte[] foot = ("--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
- out.write(foot);
- out.flush();
- out.close();
- StringBuffer buffer = new StringBuffer();
- BufferedReader reader = null;
- try {
- // 定义BufferedReader输入流来读取URL的响应
- reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
- String line = null;
- while ((line = reader.readLine()) != null) {
- //System.out.println(line);
- buffer.append(line);
- }
- if(result==null){
- result = buffer.toString();
- }
- } catch (IOException e) {
- System.out.println("发送POST请求出现异常!" + e);
- e.printStackTrace();
- throw new IOException("数据读取异常");
- } finally {
- if(reader!=null){
- reader.close();
- }
- }
- return result;
- }
- // 测试使用
- public static void main(String[] args) throws IOException {
- String filePath = "需要上传的文件路径"; // 如d:/test.pdf
- String sendUrl = "http://192.168.0.125:8080/dataProvider/uploadReport";
- String result = null;
- FileUpload fileUpload = new FileUpload();
- result = fileUpload.send(sendUrl, filePath);
- System.out.println(result);
- }
- }
在测试的时候,如果出现http 400错误,那就是模仿form表单的格式不正确,不能解析出相关信息。 错误的地方一般在(注意换行与空行):
java模拟form上传数据的更多相关文章
- Java模拟http上传文件请求(HttpURLConnection,HttpClient4.4,RestTemplate)
先上代码: public void uploadToUrl(String fileId, String fileSetId, String formUrl) throws Throwable { St ...
- java模拟浏览器上传文件
public static void main(String[] args) { String str = uploadFile("C:/Users/RGKY/Desktop/wKgBHVb ...
- c# 模拟表单提交,post form 上传文件、大数据内容
表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...
- c# 模拟表单提交,post form 上传文件、数据内容
转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...
- HTTP POST请求报文格式分析与Java实现文件上传
时间 2014-12-11 12:41:43 CSDN博客 原文 http://blog.csdn.net/bboyfeiyu/article/details/41863951 主题 HTTPHt ...
- 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件
[源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...
- Java Web文件上传
参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...
- java web 文件上传下载
文件上传下载案例: 首先是此案例工程的目录结构:
- java 实现文件上传下载以及查看
项目的目录结构 代码 IOUtils.java package cn.edu.zyt.util; import java.io.IOException; import java.io.InputSt ...
随机推荐
- dij与prim算法
两种算法本质是相同的. 都是从某一个点开始进行延伸,不断更新一个dis值,直到所有的点都被遍历到,从而求出一个最短路或者是一个树的边权的最小总和. 朴素算法都是n^2,都可以采用堆优化处理,降低复杂度 ...
- 洛谷P1012 拼数 string
又是大水题... 这一题过水,令人无法接受...... 但是如果我们不知道string的一个神奇的性质的话,就会很难受. 我一开始手写 < 号,但是发现如果 string a 的前一部分恰好是 ...
- C++中的STL中map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...
- MATLAB:增加噪声,同时多次叠加噪声图和原图以及求平均图像(imnoise,imadd函数)
本次涉及了对原图像增加高斯噪声.多次叠加原图和高斯噪声图以及叠加后的平均图像. close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; R ...
- 【codeforces】【Round#523D】TV shows
题意:n个节目,每个节目的播放时间为[li,ri],你需要选择一些电视机全部播放这些节目,一台电视机不能同时播放多个节目,选择一个新的电视机代价为x , 如果某台电视机的使用时间为[Li,Ri]需要付 ...
- 关于checkbox全选与全不选的实现与遇到的问题
HTML: <div class="outbox"> <label for="box">全选</label> <inp ...
- java代码示例(5)
/** * 需求分析:从键盘输入5名学员某门课程的笔试成绩,并求出五门成绩的总成绩和平均成绩 * @author chenyanlong * 日期:2017/10/14 */ package com. ...
- kafka channle的应用案例
kafka channle的应用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近在新公司负责大数据平台的建设,平台搭建完毕后,需要将云平台(我们公司使用的Ucloud的 ...
- brctl创建虚拟网卡详解
brctl创建虚拟网卡详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 很久之前我分享过一篇关于搭建Openvpn的笔记,在笔记的最后我分享了一个脚本,是用来创建虚拟网卡的,今天 ...
- adb 安装apk到只当设备
1.adb devices 2,选择指定的设备,如上面的那个 然后:adb -s 292be8597d94 install *apk