httpclient通过POST来上传文件,而不是通过流的形式,并在服务端进行解析(通过httpmime.jar来操作)

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

httpclient通过POST来上传文件,而不是通过流的形式,并在服务端进行解析(通过httpmime.jar来操作)的相关文章

求gxt 文件上传实例(在gxt中如何提交formpanel,服务端怎么设计),求高手!

问题描述 求gxt 文件上传实例(在gxt中如何提交formpanel,服务端怎么设计),求高手! 解决方案 FormPanel form = new FormPanel();form .setMethod(Method.POST);form .setEncoding(Encoding.MULTIPART);FileUploadField fileUpload = new FileUploadField();fileUpload.getMessages().setBrowseText(msg.b

AngularJS向后端ASP.NET API控制器上传文件_AngularJS

本文实例介绍了前端AngularJS向后端ASP.NET Web API上传文件的实现方法,具体内容如下 首先服务端: public class FilesController : ApiController { //using System.Web.Http [HttpPost] public async Task<HttpResponseMessage> Upload() { if(!Request.Content.IsMimeMultipartContent()) { this.Requ

ASP跨服务器上传文件完美解决

服务器|解决|上传 如果你有两个空间,一个大而慢,另外一个小而快,或者其中一个不支持FSO,那么跨服务器上传文件这个问题就摆在你面前了,下面就是我在解决ylog.net里面的跨服务器上传文件的日记,这个问题看似简单,里面的细节问题却是非常有趣 前提条件,空间都必须支持ASP,上传文件的服务器支持FSO,下面的叙述中,diygame.com为存上传文件的服务器,ylog.net为网站服务器,即显示用户界面的服务器... 实现功能,文件上传,上传后在网页的文本区域自动加上对于图片的UBB码,为了清楚

【大牛看看】WebClient uploafile上传文件问题

问题描述 WebClientwebClient=newWebClient(); 使用WebClientuploafile在客户端向服务器端上传文件,到底WebClient这个类需不需要服务端接受页面啊?比如这样的Uriu=newUri("http://local.com/uploadfile"); 就直接写入到local.com网站下的uploadfile文件夹下 解决方案 解决方案二:privateTask<HttpResponseMessage>Post(stringr

javascript实现获取指定精度的上传文件的大小简单实例_javascript技巧

js实现获取指定精度的上传文件的大小,主要采用html和JavaScript,用浏览器运行下述代码,按照操作:选择文件->获得文件大小的顺序,即可. 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>获得文件大小</title> </head> <body> <f

我用FileUpload上传文件,在Tomcat中可以使用,可是到了weblogic就不能用了

问题描述 我用FileUpload上传文件,在Tomcat中可以使用,可是到了weblogic就不能用了 解决方案 解决方案二:JavaEE程序有一大路径陷阱,那就是ServletContext的getRealPath方法.如果以jar包的方式部署,就会出问题,楼主请检查一下.也可以google搜索这个方法的解决方案解决方案三:请参考:http://www.blogjava.net/flysky19/articles/98006.html解决方案四:你好!谢谢你的回复!我上传文件时,在weblo

跨服务器上传文件完美解决

如果你有两个空间,一个大而慢,另外一个小而快,或者其中一个不支持FSO,那么跨服务器上传文件这个问题就摆在你面前了,下面就是我在解决ylog.net里面的跨服务器上传文件的日记,这个问题看似简单,里面的细节问题却是非常有趣前提条件,空间都必须支持ASP,上传文件的服务器支持FSO,下面的叙述中,diygame.com为存上传文件的服务器,ylog.net为网站服务器,即显示用户界面的服务器...实现功能,文件上传,上传后在网页的文本区域自动加上对于图片的UBB码,为了清楚,下面列出所有用到的文件

android httpclient 上传文件

public void uploadFileClient() { Toast.makeText(this, "现在已经开始上传了!", Toast.LENGTH_LONG).show(); String targetURL = actionUrl;// 上传指定URL File targetFile = new File(uploadFile);// 指定上传文件 PostMethod filePost = new PostMethod(targetURL); try { // 通过以

HttpClient通过Post上传文件

在之前一段的项目中,使用Java模仿Http Post方式发送参数以及文件,单纯的传递参数或者文件可以使用URLConnection进行相应的处理.           但是项目中涉及到既要传递普通参数,也要传递多个文件(不是单纯的传递XML文件).在网上寻找之后,发现是使用HttClient来进行响应的操作,起初尝试多次依然不能传递参数和传递文件,后来发现时因为当使用HttpClient时,不能使用request.getParameter()对普通参数进行获取,而要在服务器端使用Upload来