`
lambertsprite
  • 浏览: 11765 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

使用HttpClient通过Post上传文件

    博客分类:
  • java
 
阅读更多
import java.io.ByteArrayOutputStream;  
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.HttpStatus;  
import org.apache.http.ParseException;  
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;  
  
/** 
 *  
 * @author <a href="mailto:just_szl@hotmail.com"> Geray</a> 
 * @version 1.0,2012-6-12  
 */  
public class HttpPostArgumentTest2 {  
  
    //file1与file2在同一个文件夹下 filepath是该文件夹指定的路径      
    public void SubmitPost(String url,String filename1,String filename2, String filepath){  
          
        HttpClient httpclient = new DefaultHttpClient();  
          
        try {  
      
            HttpPost httppost = new HttpPost(url);  
              
            FileBody bin = new FileBody(new File(filepath + File.separator + filename1));  
                
            FileBody bin2 = new FileBody(new File(filepath + File.separator + filename2));  
              
            StringBody comment = new StringBody(filename1);  
  
            MultipartEntity reqEntity = new MultipartEntity();  
              
            reqEntity.addPart("file1", bin);//file1为请求后台的File upload;属性      
             reqEntity.addPart("file2", bin2);//file2为请求后台的File upload;属性  
             reqEntity.addPart("filename1", comment);//filename1为请求后台的普通参数;属性     
            httppost.setEntity(reqEntity);  
              
            HttpResponse response = httpclient.execute(httppost);  
              
                  
            int statusCode = response.getStatusLine().getStatusCode();  
              
                  
            if(statusCode == HttpStatus.SC_OK){  
                      
                System.out.println("服务器正常响应.....");  
                  
                HttpEntity resEntity = response.getEntity();  
                  
                  
                System.out.println(EntityUtils.toString(resEntity));//httpclient自带的工具类读取返回数据  
                  
                  
                  
                System.out.println(resEntity.getContent());     
  
                EntityUtils.consume(resEntity);  
            }  
                  
            } catch (ParseException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } finally {  
                try {   
                    httpclient.getConnectionManager().shutdown();   
                } catch (Exception ignore) {  
                      
                }  
            }  
        }  
      
      
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
          
        HttpPostArgumentTest2 httpPostArgumentTest2 = new HttpPostArgumentTest2();  
          
        httpPostArgumentTest2.SubmitPost("http://127.0.0.1:8080/demo/receiveFileServlet",  
                "test.xml","test.zip","D://test");  
    }  
      
}  

服务端代码

public class ReceiveFileServlet extends HttpServlet  {
	private File zipFile;  
	 public void doGet(HttpServletRequest request, HttpServletResponse response)    
	            throws IOException, ServletException {
		 	String number=request.getParameter("number"); 
	      
	        System.out.println("=====type========:"+number);  
		 	PrintWriter out = null;  
	        response.setContentType("text/html;charset=UTF-8");  
	        Map map = new HashMap();  
	        FileItemFactory factory = new DiskFileItemFactory();  
	        ServletFileUpload upload = new ServletFileUpload(factory);  
	        File directory = null;    
	        List items = new ArrayList();
	        try {  
	            items = upload.parseRequest(request);  
	            // 得到所有的文件  	            
	            Iterator it = items.iterator();  
	            while (it.hasNext()) {  
	                FileItem fItem = (FileItem) it.next();  
	                String fName = "";  
	                Object fValue = null;  
	                if (fItem.isFormField()) { // 普通文本框的值  
	                    fName = fItem.getFieldName();  
//	                    fValue = fItem.getString();  
	                    fValue = fItem.getString("UTF-8");  
	                    map.put(fName, fValue);  
	                } else { // 获取上传文件的值  
	                    fName = fItem.getFieldName();  
	                    fValue = fItem.getInputStream();
	                    map.put(fName, fValue);  
	                    String name = fItem.getName(); 
	                    if(name != null && !("".equals(name))) {  
	                        name = name.substring(name.lastIndexOf(File.separator) + 1);  
	                          
	                      // String stamp = StringUtils.getFormattedCurrDateNumberString();  
	                   //    String timestamp_Str = "2013"; 
	                        directory = new File("D://receipt/test/");    
	                             directory.mkdirs();  
	                          
	                        String filePath = ("D://receipt/test/")+ File.separator + name;  
	                        map.put(fName + "FilePath", filePath);  
	                          
	                        InputStream is = fItem.getInputStream();  
	                        FileOutputStream fos = new FileOutputStream(filePath);  
	                        byte[] buffer = new byte[1024];  
	                        while (is.read(buffer) > 0) {  
	                            fos.write(buffer, 0, buffer.length);  
	                        }  
	                        fos.flush();  
	                        fos.close();  
	                        map.put(fName + "FileName", name);  
	                    }  
	                }  
	            }  
	        } catch (Exception e) {  
	            System.out.println("读取http请求属性值出错!" + e.getMessage());  
//	          e.printStackTrace();  
	            System.out.println("读取http请求属性值出错");  
	        }   
	          
	        try {  
	            out = response.getWriter();  
	            out.print("1");
	       //     out.print("{success:true, msg:'接收成功'}");  
	            out.close();  
	        } catch (IOException e) {  
	            e.printStackTrace();  
	        } 
	    }    
	   
	    public void doPost(HttpServletRequest request, HttpServletResponse response)    
	            throws IOException, ServletException {    
	        this.doGet(request, response);    
	    }  
 

 

分享到:
评论

相关推荐

    HttpClient通过Post上传文件的实例代码

    以下是一个使用HttpClient通过POST上传文件的实例代码: ```java import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import org.apache....

    httpclient使用post方法上传多个图片个其他参数的demo源码

    在本示例中,我们将关注“httpclient使用post方法上传多个图片和其他参数的demo源码”,这是一个涉及到文件上传和参数传递的重要场景。 在Web开发中,POST方法常用于向服务器提交数据,比如表单数据或文件。...

    HttpClient实现POST GET和文件下载

    HttpClient是Apache基金会开发的一个HTTP客户端库...无论是简单的GET和POST请求,还是复杂的文件上传和下载,都可以通过其丰富的API来实现。在使用过程中,注意合理的错误处理和资源管理,可以提升代码的健壮性和效率。

    httpclient和RestfuL风格上传下载文件

    使用HTTPClient,你可以方便地实现文件的POST请求(用于上传)和GET请求(用于下载)。 **RESTful风格** RESTful风格的Web服务设计强调资源的概念,通过HTTP方法(如GET、POST、PUT、DELETE)来操作这些资源。在...

    httpClient post 上传 下载 图片

    - 接着,创建一个`MultipartEntityBuilder`,它可以处理多部分的HTTP请求,非常适合上传文件。通过`addBinaryBody`方法添加图片文件,指定文件名和文件内容。 - 将`MultipartEntityBuilder`构建的实体设置到`...

    HttpClient 模仿表单上传文件

    在标题"HttpClient模仿表单上传文件"中,我们关注的是如何使用HttpClient来模拟浏览器的表单提交,尤其是涉及到文件上传的场景。在描述中虽然没有具体信息,但通常这种情况会涉及multipart/form-data编码,这是HTML...

    HttpClient 4文件上传

    在Java开发中,经常会遇到需要通过HTTP协议上传文件的需求。Apache HttpClient是一个强大的客户端HTTP组件,它不仅支持HTTP协议,还能处理HTTPS请求,并提供了多种功能来简化HTTP客户端开发过程。本文档将详细介绍...

    HttpClient 4 - 文件上传

    总结起来,HttpClient 4通过`MultipartEntity`和`HttpPost`提供了强大的文件上传功能,结合`HttpAsyncClient`还能实现高效的异步传输。这些组件和类库是理解和实现HTTP文件上传的关键,对于任何需要与Web服务器交互...

    HttpClient 文件上传

    在这个场景中,我们主要关注如何使用HttpClient进行文件上传。 文件上传通常涉及到Web服务器与客户端之间的交互,比如用户通过网页上传图片或文档到服务器。HttpClient库提供了一个方便的接口来实现这种功能。以下...

    使用HttpClient实现文件的上传所需lib

    它允许我们将文件作为多部分/form-data类型的数据发送,这是HTTP协议中用于上传文件的标准格式。 3. **文件上传步骤**: - **创建HttpClient对象**:首先,我们需要实例化一个`CloseableHttpClient`对象,它是...

    四、使用HttpClient上传测试文件服务器

    本篇文章将详细讲解如何利用HttpClient上传文件到测试服务器,这在进行API测试、自动化测试或者集成测试时非常有用。我们先来理解一下HttpClient的基本概念,然后逐步探讨文件上传的步骤。 HttpClient是由Apache...

    android httpclient文件上传 http协议post get方法向服务器传输数据

    总结来说,本项目通过具体的代码示例,深入浅出地介绍了Android中HTTPClient的使用,包括GET和POST请求的实现,以及文件上传的详细步骤。这对于任何需要进行网络通信的Android开发者来说,都是不可或缺的知识点。

    Java后端HttpClient Post提交文件流 及服务端接收文件流

    HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。

    httpclient 上传文件

    在本篇文章中,我们将深入探讨如何使用HTTPClient上传文件以及解决可能出现的乱码问题。 首先,让我们关注“httpclient 上传文件”。在HTTP协议中,文件上传通常涉及到POST请求,特别是当Content-Type设置为...

    httpclient 文件上传 下载

    HTTPClient 4提供了`MultipartEntityBuilder`或`HttpEntityEnclosingRequestBase`类来构建多部分表单数据,用于上传文件。首先,你需要创建一个`FileEntity`对象,指定要上传的文件路径,然后将其添加到`...

    httpClient上传文件

    在这个场景中,我们关注的是如何使用HttpClient来上传文件到服务器。Apache HttpClient支持POST请求,特别是Multipart/form-data类型的POST,这是上传文件的标准格式。以下是关于这个主题的详细讲解: 1. **...

    HttpClient PostMethod 上传文件

    在本示例中,我们将深入探讨如何使用HttpClient的PostMethod来上传文件,以及处理Get和Post请求中的乱码问题。 一、HttpClient基础 HttpClient库提供了一套完整的API,允许我们构建复杂的HTTP请求。它支持GET、POST...

    HttpClient上传文件需要的Jar包

    在这个场景中,"HttpClient上传文件需要的Jar包"指的是在使用HttpClient进行文件上传操作时,你需要确保引入了正确的依赖库。 首先,我们需要了解HttpClient的基本概念。HttpClient是Apache软件基金会的一个项目,...

    http post方式上传文件(C#)

    通过理解HTTP协议、使用适当的C#类库和正确处理大文件、进度显示及错误处理,我们可以构建出一个功能完备、稳定的文件上传系统。在WindowsFormsApplication3项目中,你可以集成这些概念,创建一个用户友好的文件上传...

Global site tag (gtag.js) - Google Analytics