摘自今天写的一段代码:
public static int uploadFiles(String fullUrl,Map files,Map params,Map cookies,String encoding) throws IOException {
HttpClient client = new HttpClient();
try {
if(encoding!=null && encoding.length()>0) {
EncodingUtil.TempEncoding=encoding;
}
URL url=new URL(fullUrl);
String host=url.getHost();
String path=url.getPath();
PostMethod post=new PostMethod(fullUrl);
try {
post.setFollowRedirects(false);
List parts=new ArrayList();
if(params!=null) {
for (Map.Entry entry : params.entrySet()) {
String name=entry.getKey();
Object val=entry.getValue();
if(val instanceof Collection) {
for (Object one : (Collection)val) {
parts.add(new StringPart(name,one.toString(),encoding));
}
} else if(val.getClass().isArray()) {
int len = Array.getLength(val);
for(int i=0;i entry : files.entrySet()) {
parts.add(new FilePart(entry.getKey(),entry.getValue()));
}
}
post.setRequestEntity(new MultipartRequestEntity(parts.toArray(new Part[parts.size()]),post.getParams()));
if(cookies!=null) {
HttpState state = client.getState();
if(state==null) {
state=new HttpState();
}
for (Map.Entry entry : cookies.entrySet()) {
Cookie cookie=new Cookie();
cookie.setDomain(host);
cookie.setPath(path);
cookie.setName(entry.getKey());
cookie.setValue(entry.getValue());
state.addCookie(cookie);
}
client.setState(state);
}
return client.executeMethod(post);
} finally {
post.releaseConnection();
}
} finally {
EncodingUtil.TempEncoding=null;
client.getHttpConnectionManager().closeIdleConnections(0);
}
}
一个静态函数,拷贝下来就能用
参数说明:
String fullUrl :上传的地址,全路径,如 http://localhost/doupload.jsp
Map files : 要传的文件,可以是多个
Map params : 同时还可以传递参数,Object 一般是String,也可以是 String[] 或 List
Map cookies : 可能要设置的cookie值
String encoding : 文件名的编码
调用示例:
public void test10() throws Exception {
Map files=new HashMap();
files.put("file1",new File("C:\\Users\\zms\\Desktop\\密保卡.jpg"));
files.put("file2",new File("C:\\Users\\zms\\Desktop\\todo.txt"));
Map params=new HashMap();
params.put("key1","val1");
params.put("key2","值2");
params.put("键3","值3");
Map cookies=new HashMap();
cookies.put("JSESSIONID","BD8BE17C1E56C81DA866643E7125A163");
int status = Tools.uploadFiles("http://localhost/doupload.jsp", files, params, cookies,"GB18030");
System.out.println(status);
}
注意:默认 HttpClient 是无法传中文文件名的
注意代码里的
EncodingUtil.TempEncoding=encoding;
这句是编译不过的,需要修改HttpClient的源代码
我用的版本是HttpClient 3.1,修改 org.apache.commons.httpclient.util.EncodingUtil
大概在 222行,修改 getAsciiBytes 函数,增加 一个静态变量,代码大概如:
public static String TempEncoding="";
/**
* Converts the specified string to byte array of ASCII characters.
*
* @param data the string to be encoded
* @return The string as a byte array.
*
* @since 3.0
*/
public static byte[] getAsciiBytes(final String data) {
if (data == null) {
throw new IllegalArgumentException("Parameter may not be null");
}
try {
return data.getBytes((TempEncoding!=null && TempEncoding.length()>0)?TempEncoding:"US-ASCII");
} catch (UnsupportedEncodingException e) {
throw new HttpClientError("HttpClient requires ASCII support");
}
}
分享到:
相关推荐
httpClient上传文件,能直接运行的代码,appache commons
httpclient和RestfuL服务风格上传下载文件,可改为JAVA分布式系统进行交互,具体用法和改法详见代码里的注释
服务器端自己写,本示例为客户端代码,可以解决httpClient4乱码问题,是替代修改源码的最佳写法。
Android使用HttpClient实现上传下载功能并监控进度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
主要介绍了HttpClient通过Post上传文件的实例代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
主要介绍了 HttpClient Post 二进制/字节流/byte[]实例代码的相关资料,需要的朋友可以参考下
代码是基于loopj (Asynchronous Http Client for Android) 的文件上传Demo,loopj 是基于 Apache's HttpClient 的异步http客户端。
利用QT的进行HTTP上传和下载文件,具有界面功能,代码完整
通过org.apache.commons.httpclient.HttpClient来实现文件上传,该jar包可以直接从网上所搜、下载。 /** * @param mContext 上下文 * @param targetUrl 文件上传地址 * @param filePath 文件路径 */ public ...
该程序不仅支持文件上传,还能够传递FormData参数,为开发者提供了极大的便利。 这款程序的核心优势在于其高效性和灵活性。通过HttpClient类,程序能够快速建立与指定URL的连接,实现数据的快速传输。同时,它支持...
java使用代码上传tif至geoserver发布服务并设置坐标系和style样式 包含jar::commons-codec-1.15.jar commons-io-2.2.jar commons-logging-1.2.jar geoserver-manager-1.7.0-pdok2.jar jdom-1.1.3.jar org....
在开发微信支付的小微商户进件接口时,需要通过表单来上传身份证图片等数据。在微信支付接口文档也说明了,需要使用 multipart/form-data 的方式发送请求。.NET 提供了 MultipartFormDataContent 类型,帮助我们构建...
angular的http模块应用 参考教材以及代码 实现的youtube搜索框 启动: npm install, npm start
1:读取本地ini 的配置文件 2:httpclient 验证登陆 以及上传附件 3:通过outlook api 生成邮件EML ( outlook的内嵌图片好像没有提供接口,很奇怪。...下载的朋友 ,请注销掉里面 httpclient 这块的代码这样方便看代码
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
使用 cookie 和上传文件增强截击扩展齐射,实现请求携带饼干,一次请求上传单个文件、多个文件同时上传等。 volley 库包含 3 个 http jar(来自 ) 罐 HttpClient 4.x HttpClient 4.x HttpCore 4.x 添加 Gradle ...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式展开讲解知识点,即介绍案例->案例涉及...