1. 首先需要对应的JAR包 导入 httpmime-4.1.1.jar。
package url; import io.IoStreamUtil; import java.io.File; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; 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.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; /** * httpclient上传文件 * @author linwei * */ public class MultipartEntityUtil { public static String postFile(File file,String url) throws ClientProtocolException, IOException { FileBody bin = null; HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); if(file != null) { bin = new FileBody(file); } StringBody username = new StringBody("13696900475"); StringBody password = new StringBody("13696900475"); //请记住,这边传递汉字会出现乱码,解决方法如下,设置好编码格式就好 //new StringBody("汉字",Charset.forName("UTF-8"))); MultipartEntity reqEntity = new MultipartEntity(); reqEntity.addPart("username", username); reqEntity.addPart("password", password); reqEntity.addPart("data", bin); httppost.setEntity(reqEntity); System.out.println("执行: " + httppost.getRequestLine()); HttpResponse response = httpclient.execute(httppost); System.out.println("statusCode is " + response.getStatusLine().getStatusCode()); HttpEntity resEntity = response.getEntity(); System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); if (resEntity != null) { System.out.println("返回长度: " + resEntity.getContentLength()); System.out.println("返回类型: " + resEntity.getContentType()); InputStream in = resEntity.getContent(); System.out.println("in is " + in); System.out.println(IoStreamUtil.getStringFromInputStream(in)); } if (resEntity != null) { resEntity.consumeContent(); } return null; } public static void main(String[] args) throws ClientProtocolException, IOException { File file = new File("d:/rss.xml"); String url = "http://localhost:8080/webtest/servlet/URLTest"; postFile(file,url); } }
2. 服务端的接收解析代码(同样的,服务端也需要导入上面提到的JAR包) (特别注释:在servlet中直接获取的request是可以正常解析的,但是,在ACTION中获取的request则是通过ACTION内部的类进行了封装,因此,在ACTION中执行以下代码,upload.parseRequest(request)方法执行返回的是空的,暂没找到解决办法。)
//commons-fileupload.jar commons-io request.setCharacterEncoding("UTF-8"); boolean isMultipart = ServletFileUpload.isMultipartContent(request); FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List items = upload.parseRequest(request); Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { //普通文本信息处理 String paramName = item.getFieldName(); String paramValue = item.getString(); System.out.println(paramName + ":" + paramValue); } else { //上传文件信息处理 String fileName = item.getName(); byte[] data = item.get(); String filePath = "d:/ssssss.txt"; FileOutputStream fos = new FileOutputStream(filePath); fos.write(data); fos.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } }
时间: 2024-10-20 23:00:09