`
zhangfan822
  • 浏览: 256227 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

httpclient 上传中文名文件

阅读更多
/**
	 * @category 从本地上传文件到服务器
	 * TODO 从本地上传文件到服务器
	 * @param ServerPath	报表服务器地址
	 * @param fileName		需上传的报表文件名
	 * @param LocalPath		报表所在本地路径
	 * @return outString	状态注记~状态信息
	 */
	public static String UpLoadFileFromLocalToServer(String ServerPath,String fileName,String LocalPath,String PathOnServer){
		String outString = "";
		HttpClient client = new HttpClient();
        MultipartPostMethod mPost = new MultipartPostMethod();
        client.setConnectionTimeout(8000);
        String url = ServerPath + "/FileUpload.jsp";
        try {
        	// Send any XML file as the body of the POST request
        	File l = new File(LocalPath);
        	String p = l.getPath();
        	String n = l.getName();
        	int index = p.lastIndexOf(n);
        	LocalPath = LocalPath.substring(0,index);
        	String fullfileName = LocalPath + File.separatorChar + fileName;
        	
        	//fileName = PathOnServer + File.separatorChar + fileName;
        	fileName = fileName.replaceAll("\\\\", "/").replaceAll("//","/");
        	System.out.println(fileName);
			fileName = fileName.replaceAll("\\\\", "/").replaceAll("//","/");
			
            File file = new File(fullfileName);
//            
            mPost.addParameter(file.getName(), fileName, file);
	        FilePart filePart = new FilePart("file",file);
			mPost.addPart(filePart);

			mPost.getParams().setContentCharset("UTF-8");
            mPost.setURI(new URI(url,false,"UTF-8"));
            
	        int statusCode = client.executeMethod(mPost);
	        if (statusCode == HttpStatus.SC_OK) {
				String strResponse = mPost.getResponseBodyAsString().trim();
				System.out.println("statusLine>>>1" + strResponse.trim());
				if(strResponse.indexOf("Upload Success!!")!=-1){
					outString = "true~发布成功";
					System.out.println("statusLine>>>2" + outString);
				}else if(strResponse.indexOf("Upload Failed!!")!=-1){
					outString = "false~发布失败";
					System.out.println("statusLine>>>3" + outString);
				}
			}
		} catch (HttpException e) {
			outString = "false~网络通信失败";
			// TODO Auto-generated catch block
			// e.printStackTrace();
		} catch (IOException e) {
			outString = "false~报表服务未开启或文件读取失败";
			// TODO Auto-generated catch block
			// e.printStackTrace();
		}finally{
			mPost.releaseConnection();
	    }
        return outString;
	}


FileUpload.jsp

<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.io.*"%>
<%@ page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@ page import="org.apache.commons.fileupload.FileItem"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.io.File"%>
<%
	boolean flag = false;
	//request.setCharacterEncoding("utf-8");
	try{
		DiskFileUpload diskFileUpload = new DiskFileUpload();
		diskFileUpload.setHeaderEncoding("utf8");
		///设置可上传文件的最大尺寸
		diskFileUpload.setSizeMax(1234556677);
		//设置缓冲区大小,这里是2kb
		diskFileUpload.setSizeThreshold(2048);
		//设置临时目录
		diskFileUpload.setRepositoryPath("");
		//获取所有文件
		List<FileItem> items = diskFileUpload.parseRequest(request);// 得到所有的文件
		Iterator<FileItem> i = items.iterator();
		while (i.hasNext()){
			FileItem fi = (FileItem) i.next();
			System.out.println("fi.getName()"+fi.getName());
			String fileName = fi.getName();//new String(fi.getName().getBytes("gbk"),"utf-8");
			File l = new File(fileName);
			String fn = l.getName();
			String uploadPath = l.getPath();
			//System.out.println("fn"+fn);
			uploadPath = uploadPath.substring(0,uploadPath.lastIndexOf(fn));
			System.out.println("uploadPath1"+uploadPath);
			uploadPath = application.getRealPath("/") + uploadPath;
			File up = new File(uploadPath);
			if(!up.exists()){
				up.mkdirs();
			}
			if (fileName != null){
				File fullFile = new File(fn);
				File savedFile = new File(uploadPath, fullFile.getName());
				fi.write(savedFile);
			}
		}
		flag = true;
	}catch (Exception e){
		System.out.println(e.getMessage());
	}	
	if(flag){
		out.println("Upload Success!!");
	}else{
		out.println("Upload Failed!!");
	}
%>

关于httpclient乱码问题我改写了源码
改写的地方
org.apache.commons.httpclient.util.EncodingUtil

 public static byte[] getAsciiBytes(final String data) {

        if (data == null) {
            throw new IllegalArgumentException("Parameter may not be null");
        }

        try {
            return data.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new HttpClientError("HttpClient requires ASCII support");
        }
    }

org.apache.commons.httpclient.methods.multipart.StringPart
 public StringPart(String name, String value, String charset) {
        
        super(
            name,
            DEFAULT_CONTENT_TYPE,
            charset == null ? "UTF-8" : charset,
            DEFAULT_TRANSFER_ENCODING
        );
        if (value == null) {
            throw new IllegalArgumentException("Value may not be null");
        }
        if (value.indexOf(0) != -1) {
            // See RFC 2048, 2.8. "8bit Data"
            throw new IllegalArgumentException("NULs may not be present in string parts");
        }
        this.value = value;
    }

org.apache.commons.httpclient.methods.multipart.FilePart
 public FilePart(String name, PartSource partSource, String contentType, String charset) {
        
        super(
            name, 
            contentType == null ? DEFAULT_CONTENT_TYPE : contentType, 
            charset == null ? "UTF-8" : charset, 
            DEFAULT_TRANSFER_ENCODING
        );

        if (partSource == null) {
            throw new IllegalArgumentException("Source may not be null");
        }
        this.source = partSource;
    }
分享到:
评论
2 楼 旋风小皮皮 2012-12-18  
旋风小皮皮 写道
我运行的代码为什么jsp接收的 items 为空呢?求指教

找到原因了,呵呵~
下面两个参考帖子
http://bbs.csdn.net/topics/310001528
http://auzll.iteye.com/blog/919981
1 楼 旋风小皮皮 2012-12-18  
我运行的代码为什么jsp接收的 items 为空呢?求指教

相关推荐

    httpclient4上传文件中文乱码问题解决办法代码示例

    服务器端自己写,本示例为客户端代码,可以解决httpClient4乱码问题,是替代修改源码的最佳写法。

    httpClient上传文件

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

    HttpClient 4 - 文件上传

    HttpClient 4 版本引入了许多改进,使得文件上传变得更加简单和高效。在这个主题中,我们将深入探讨HttpClient 4如何实现文件上传,以及相关的核心概念和技术。 首先,我们需要了解HttpClient 4的基本用法。...

    httpclient和RestfuL风格上传下载文件

    在Java开发中,HTTPClient和RESTful风格的接口被广泛用于实现文件的上传与下载功能。HTTPClient是一个强大的HTTP客户端库,而RESTful是一种轻量级的、基于HTTP协议的软件架构风格,常用于构建Web服务。在分布式系统...

    httpclient 上传文件

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

    HttpClient 4文件上传

    ### HttpClient 4 文件上传知识点详解 #### 一、概述 在Java开发中,经常会遇到需要通过HTTP协议上传文件的需求。Apache HttpClient是一个强大的客户端HTTP组件,它不仅支持HTTP协议,还能处理HTTPS请求,并提供了...

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

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

    java使用HttpClient通过url下载文件到本地

    在这个特定的场景中,我们利用HttpClient来从指定的URL下载文件到本地。以下是对这个主题的详细阐述: 1. **HttpClient介绍**: HttpClient是一个Java库,支持HTTP/1.1协议以及部分HTTP/2特性。它提供了一组高级...

    关闭HttpClient日志的logback文件

    关闭HttpClient日志的logback文件

    httpClient文件上传

    使用httpclient上传文件, CloseableHttpClient httpClient = HttpClientBuilder.create().build();

    HttpClient上传文件需要的Jar包

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

    HttpClient4.2.5上传文件,无中文文件名乱码问题

    HttpClient4.2.5实现文件上传,无中文文件名乱码问题。亲测无问题。有问题可吐槽!

    HttpClient 模仿表单上传文件

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

    HttpClient实现文件下载

    ### HttpClient 实现文件下载 #### 一、简介与原理 在Java开发中,经常会遇到需要通过HTTP协议来获取网络资源的需求,例如从Web服务器下载文件。Apache HttpClient 是一个用于发送HTTP请求的Java类库,它提供了...

    Arduino HttpClient 库文件

    `HttpClient.cpp` 文件是实现文件,它实现了 `HttpClient.h` 中声明的类和函数。在这里,你可以找到实际执行 HTTP 请求的代码,如建立 TCP 连接、发送数据、接收响应等低级网络操作。这些功能通常是基于 Arduino 的 ...

    HttpClient 文件上传

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

    httpclient 文件上传 下载

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

    httpclient 4.3 中文版

    ### HttpClient 4.3 中文版相关知识点 #### 一、概述 Apache HttpClient 是一个用于构建 HTTP 客户端的应用程序编程接口 (API),属于 Apache Jakarta Commons 的一部分。该库支持 HTTP 协议的最新标准,并提供了...

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

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

Global site tag (gtag.js) - Google Analytics