描述:
通过HttpClient将图片上传到服务端,上传成功后,服务端返回结果(字符串形式,非页面)。
注:服务器采用Struts2框架。
实现:
采用Struts2框架和直接使用Servlet的方式是不一样的,因为Struts2有很多过滤器,通过过滤器之后文件接收的方式不一样(具体怎么不一样,大家网上找找)。
1. 构建HttpPost:
CloseableHttpClient httpclient = HttpClients.createDefault(); String url = "http://localhost:8080/Upload/fileUpload!execute"; HttpPost httppost = new HttpPost(url); |
2. 上传图片:
FileBody bin = new FileBody(new File("my.png"));
// NOTE: part value should be same with action's file variable String part = "upload"; HttpEntity reqEntity = MultipartEntityBuilder.create().addPart(part, bin).build();
httppost.setEntity(reqEntity);
System.out.println("executing request " + httppost.getRequestLine()); CloseableHttpResponse response = httpclient.execute(httppost); |
注意红色部分的upload,这里的名字和anction中文件变量的名字要一致。
3. 最后就是获取执行结果。
服务端Action配置如下:
<action name="fileUpload" class="com.gstone.markinfo.web.FileUploadAction"> <result name="success" type="stream"> <param name="contentType">text/html</param> <param name="inputName">ret</param> </result> <result name="error">/home/login.jsp</result> </action> |
注意:type需要为“stream”
param名需要为inputName,ret表示Action返回值的变量名,类型需要是InputStream,比如ByteArrayInputStream。
具体示例可下载:http://download.csdn.net/detail/huahuaspy/9120025
注意,服务端只包含了Action类和struts配置文件,需要自己搭建struts2框架。