文档章节

HttpClient 和HttpConnection 两种方式POST文件

langke
 langke
发布于 2016/08/03 17:19
字数 492
阅读 9
收藏 0

/**
* HttpClientPOST文件
* @param URL
* @param content 传params时,此参为""
* @param params
* @param fileName
* @return
*/
public String postUrl(String URL,String content,Map<String,String> params,String fileName){
String result = "";
PostMethod postMethod = new PostMethod(URL);
RequestEntity requestEntity;
String CHARSET = "UTF-8";
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
String tmp ;
try {
postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
postMethod.getParams().setContentCharset(CHARSET);
if (content != null) {
if(fileName == null){
requestEntity = new StringRequestEntity(content,"text/html",CHARSET);
}else{
Part [] parts = new Part[params.size()+1] ;
int i=0;
for (Map.Entry<String, String> entry : params.entrySet()){
parts[i++]=new StringPart(entry.getKey(), entry.getValue());
}
parts[i] = new FilePart("pic", new File(fileName),"multipart/form-data",CHARSET);
requestEntity = new MultipartRequestEntity(parts,postMethod.getParams());
}
postMethod.setRequestEntity(requestEntity);
}
httpClient.executeMethod(postMethod);
if(200==postMethod.getStatusCode()){
is = postMethod.getResponseBodyAsStream();//返回Header里得不到Content-Length 长度或者长度超过1024*1024 会警告:Going to buffer response body of large or unknown size Using getResponseBodyAsStream instead is recommended
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
while(( tmp = br.readLine())!=null){
result += tmp;
}
}else{
log.error(postMethod.getStatusLine());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
postMethod.releaseConnection();
try {
is.close();
isr.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}

/**
* HttpConnection提交数据
* @param str URL
* @param params 提交参数
* @param fileName 提交文件名
* @return
*/
public String httpConn(String str,Map<String, String> params,String fileName){
String result = null;
URL url ;
HttpURLConnection conn = null ;
InputStream is = null;
DataInputStream dis = null;
DataOutputStream dos = null;
StringBuilder sb = null;
String BOUNDARY = java.util.UUID.randomUUID().toString();
String PREFIX = "--", LINEND = "\r\n";
String MULTIPART_FROM_DATA = "multipart/form-data";
String CHARSET = "UTF-8";
try {
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
System.getProperties().setProperty("http.proxyHost",proxy);
System.getProperties().setProperty("http.proxyPort",port);
url = new URL(str);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setUseCaches(false);
conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
conn.setRequestProperty("Charsert", CHARSET);
conn.setRequestProperty("Content-Type",MULTIPART_FROM_DATA+ ";boundary=" + BOUNDARY);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
dos = new DataOutputStream(conn.getOutputStream());
sb = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()){
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);
sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
sb.append(LINEND);
sb.append(entry.getValue());
sb.append(LINEND);
}
if(log.isInfoEnabled())
log.info(sb);
dos.write(sb.toString().getBytes());
sb.delete(0, sb.length());
sb.reverse();
if(fileName!=null){
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
sb.append("Content-Disposition: form-data; name=\"pic\"; filename=\"" + fileName + "\"" + LINEND);
sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);
sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
sb.append(LINEND);
if(log.isInfoEnabled())
log.info(sb);
dos.write(sb.toString().getBytes());
InputStream img = new FileInputStream(fileName);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = img.read(buffer)) != -1){
dos.write(buffer, 0, len);
}
img.close();
dos.write(LINEND.getBytes());
}
// 请求结束标志
String end_data = PREFIX + BOUNDARY + PREFIX + LINEND;
if(log.isInfoEnabled())
log.info(end_data);
dos.write(end_data.getBytes());
dos.flush();
//dos.close();
int code = conn.getResponseCode();
if(code==200){
is = conn.getInputStream();
}else{
log.error(conn.getResponseCode()+conn.getResponseMessage());
is = conn.getErrorStream();
}
dis = new DataInputStream(is);
byte b[] = new byte[dis.available()];
dis.read(b);
result = new String(b);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
is.close();
dis.close();
conn.disconnect();
} catch (IOException e) {
e.printStackTrace();
}

}
return result ;
}

本文转载自:http://www.cnblogs.com/langke93/archive/2011/11/22/2259070.html

langke
粉丝 1
博文 70
码字总数 3645
作品 0
架构师
私信 提问
Android HttpClient上传文件与Httpconnection知识小结

Android上传文件到服务端可以使用HttpConnection 上传文件,也可以使用Android封装好的HttpClient类。当仅仅上传文件可以直接使用httpconnection 上传比较方便快捷。 1、使用HttpConection上...

安克诚
2012/07/11
0
0
【J2EE系列】HttpClient 学习整理 [转]

HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的实现,发现这个开源项目之后就有点眉目了,令人头痛的cookie问题还是有办法解决滴。在网上整理了一些东西,写得很好,寄放...

磊神Ray
2012/01/12
0
0
应用HttpClient来对付各种顽固的WEB服务器

一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等。所访问的这些 页面有的仅仅是一些普通的页面,有的需要用户登录后方可使用...

红薯
2008/10/05
4.1K
2
通过JAVA程序来获取某个页面的信息 HttpClient

今天碰到一个问题,就是跨域调取数据的问题.....应该算是跨域吧,看到程序时用httpClient写的,晚上回来看了一下,非常好,看到一篇好文章,转过来 一般的情况下我们都是使用IE或者Navigator...

枫爱若雪
2012/04/12
0
0
JAVA-用HttpClient来模拟浏览器GET,POST

一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅仅是一些普通的页面,有的需要用户登录后方可使用,...

Liuxz-aaa
2011/08/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构

作者:闲鱼技术-国有   讲师介绍 国有,闲鱼架构团队负责人。在7月13号落幕的2019年Archsummit峰会上就近一年来闲鱼在Flutter&FaaS一体化项目上的探索和实践进行了分享。 传统Native+Web+...

阿里云云栖社区
16分钟前
1
0
总结无线AP与AC之间的各种问题

无线网络搭建中,都说AP+AC的组网模式最现在最先进的,但是在使用过程中还是存在一些问题,下面这些有没有大家碰到的呢? 无线网络搭建中,都说AP+AC的组网模式最现在最先进的,但是在使用过程...

Linux就该这么学
23分钟前
2
0
bootstrap 图标使用说明

1、小图标使用说明 <i class="fa fa-search"></i>详情<a class="btn btn-warning btn-xs"><i class="fa fa-search"></i>搜索</a> 2、元素背景颜色 我们先来看看元素背景的颜色有哪几......

moon888
26分钟前
1
0
windows 远程下载sftp 服务器 文件

下载 putty https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 把安装后的 psftp.exe 放到需要下载文件的目录 尝试执行远程连接 运行 psftp.exe open : 111:111:111:111 录入...

donald121
42分钟前
3
0
阿里、网易和腾讯面试题 C/C++

一、线程、锁 1、Posix Thread互斥锁 线程锁创建 a.静态创建 pthread_mutex_tmutex = PTHREAD_MUTEX_INITIALIZER; b.动态创建 pthread_mutex_tmutex = pthread_mutex_init(pthread_mutex_t*......

linux服务器架构
43分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部