java表单批量提交_java 模拟html表单(form)提交数据 包含多文件 上传 表单提交 for j2me j2s...

import java.io.ByteArrayOutputStream;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.Enumeration;

import java.util.Hashtable;

import java.util.List;

import java.net.HttpURLConnection;

import java.net.URL;

/**

* 模拟html表单提交数据,喜欢研究的同学可以把代码优化一下。

*/

public class HttpMultipartRequest {

//每个post参数之间的分隔

static final String BOUNDARY = "----------V2ymHFg03ehbqgZCaKO6jy";

public static void main(String[] args) {

List stringParams = new ArrayList();

stringParams.add(new String[]{"do", "justDoIt"});

stringParams.add(new String[]{"myname", "aa我是一个测试cc123"});

stringParams.add(new String[]{"description", "bb我是码农我是一个测试我是一个测试cc567"});

List fileParams = new ArrayList();

fileParams.add(new String[]{"uploadFile", "我是码农的一个测试.zip", "application/zip", "D://我是一个测试.zip"});

HttpMultipartRequest req = new HttpMultipartRequest("http://your_address", stringParams, fileParams);

try {

byte[] response = req.sendPost();

System.out.println(new String(response));

} catch (Exception e) {

e.printStackTrace();

}

}

// 连接的地址

private String urlStr;

// 文字post项集 strParams 1:key 2:value

private List strParams;

// 文件的post项集 fileParams 1:fileField, 2.fileName, 3.fileType, 4.filePath

private List fileParams;

/**

* 建立一个request连接

* @param urlStr

* @param strParams 1:key 2:value

* @param fileParams 1:fileField, 2.fileName, 3.fileType, 4.filePath

*/

public HttpMultipartRequest(String urlStr, List strParams, List fileParams) {

this.urlStr = urlStr;

this.strParams = strParams;

this.fileParams = fileParams;

}

/**

* 向服务器发送post请求

* @return byte[]

* @throws Exception

*/

public byte[] sendPost() throws Exception {

//http连接器

HttpURLConnection hc = null;

//byte输出流,用来读取服务器返回的信息

ByteArrayOutputStream bos = null;

//输入流,用来读取服务器返回的信息

InputStream is = null;

//保存服务器返回的信息的byte数组

byte[] res = null;

try {

URL url = new URL(urlStr);

hc = (HttpURLConnection) url.openConnection();

hc.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

hc.setRequestProperty("Charsert", "UTF-8");

// 发送POST请求必须设置如下两行

hc.setDoOutput(true);

hc.setDoInput(true);

hc.setUseCaches(false);

hc.setRequestMethod("POST");

OutputStream dout = hc.getOutputStream();

1.先写文字形式的post流

//头

String boundary = BOUNDARY;

//中

StringBuffer resSB = new StringBuffer("/r/n");

//尾

String endBoundary = "/r/n--" + boundary + "--/r/n";

//strParams 1:key 2:value

if(strParams != null){

for(String[] parsm : strParams){

String key = parsm[0];

String value = parsm[1];

resSB.append("Content-Disposition: form-data; name=/"").append(key).append("/"/r/n").append("/r/n").append(

value).append("/r/n").append("--").append(boundary).append("/r/n");

}

}

String boundaryMessage = resSB.toString();

//写出流

dout.write( ("--"+boundary+boundaryMessage).getBytes("utf-8") );

//2.再写文件开式的post流

//fileParams 1:fileField, 2.fileName, 3.fileType, 4.filePath

resSB = new StringBuffer();

if(fileParams != null){

for(int i=0, num=fileParams.size(); i

String[] parsm = fileParams.get(i);

String fileField = parsm[0];

String fileName = parsm[1];

String fileType = parsm[2];

String filePath = parsm[3];

resSB.append("Content-Disposition: form-data; name=/"").append(fileField).append("/"; filename=/"").append(

fileName).append("/"/r/n").append("Content-Type: ").append(fileType).append("/r/n/r/n");

dout.write( resSB.toString().getBytes("utf-8") );

//开始写文件

File file = new File(filePath);

DataInputStream in = new DataInputStream(new FileInputStream(file));

int bytes = 0;

byte[] bufferOut = new byte[1024 * 5];

while ((bytes = in.read(bufferOut)) != -1) {

dout.write(bufferOut, 0, bytes);

}

if(i

dout.write( endBoundary.getBytes("utf-8") );

}

in.close();

}

}

//3.最后写结尾

dout.write( endBoundary.getBytes("utf-8") );

dout.close();

int ch;

is = hc.getInputStream();

bos = new ByteArrayOutputStream();

while ((ch = is.read()) != -1) {

bos.write(ch);

}

res = bos.toByteArray();

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (bos != null)

bos.close();

if (is != null)

is.close();

} catch (Exception e2) {

e2.printStackTrace();

}

}

return res;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值