之前写了一个Struts2文件上传的Action,可以编写一个jsp上传页面来测试这个Action,我们也可以编写一个简单的客户端来测试上传的Action。利用HttpClient能够方便的实现这个效果,具体代码如下:
TestUpload.java
package com.figo.test;
import java.io.File;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class TestUpload {
public static void main(String[] args) {
// TODO Auto-generated method stub
HttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httppost = new HttpPost(
"http://localhost:8080/Upload/fileUpload!execute");
FileBody bin = new FileBody(new File("D:\\Wangyf15\\sign.txt"));
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("upload", bin);// upload为请求后台的File upload属性
httppost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httppost);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity resEntity = response.getEntity();
// httpclient自带的工具类读取返回数据
System.out.println(EntityUtils.toString(resEntity));
EntityUtils.consume(resEntity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpclient.getConnectionManager().shutdown();
} catch (Exception ignore) {
}
}
}
}
这样比人工构造http post简单很多,HttpClient还有很多强大的能够,有待于继续深入研究。