1. String targetUrl = "http://localhost:8080/Test" ;
  2. PostMethod filePost = new PostMethod(targetUrl) { //这个用来中文乱码
  3. public String getRequestCharSet() {
  4. return "UTF-8" ; //
  5. }
  6. };
  7. try {
  8. HttpClient client = new HttpClient();
  9. File file = new File( "c:/新闻.xml" );
  10. Part[] parts = new Part[] { new CustomFilePart(file.getName(), file)};
  11. filePost.setRequestEntity( new MultipartRequestEntity(parts, filePost.getParams()));
  12. int statuscode=client.executeMethod(filePost);
  13. if (statuscode == HttpStatus.SC_OK) {
  14. System.out.println( "添加文件成功" );
  15. } else {
  16. System.out.println( "添加文件失败" );
  17. }
  18. } catch (Exception ex) {
  19. ex.printStackTrace();
  20. }
  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.io.IOException;
  4. import java.io.OutputStream;
  5. import org.apache.commons.httpclient.methods.multipart.FilePart;
  6. import org.apache.commons.httpclient.util.EncodingUtil;
  7. /**
  8. *解决中文文件名乱码
  9. */
  10. public class CustomFilePart extends FilePart {
  11. public CustomFilePart(String filename, File file)
  12. throws FileNotFoundException {
  13. super (filename, file);
  14. }
  15. protected void sendDispositionHeader(OutputStream out) throws IOException {
  16. super .sendDispositionHeader(out);
  17. String filename = getSource().getFileName();
  18. if (filename != null ) {
  19. out.write(EncodingUtil.getAsciiBytes(FILE_NAME));
  20. out.write(QUOTE_BYTES);
  21. out.write(EncodingUtil.getBytes(filename, "utf-8" ));
  22. out.write(QUOTE_BYTES);
  23. }
  24. }
  25. }

而服务端使用apache的commonfileupload:

  1. File tempfile = new File(System.getProperty( "java.io.tmpdir" )); // 采用系统临时文件目录
  2. DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
  3. diskFileItemFactory.setSizeThreshold( 4096 ); // 设置缓冲区大小,这里是4kb
  4. diskFileItemFactory.setRepository(tempfile); // 设置缓冲区目录
  5. ServletFileUpload fu = new ServletFileUpload(diskFileItemFactory);
  6. fu.setSizeMax( 4194304 ); // 限制文件大小最大为4M
  7. List fileItems = fu.parseRequest(request);
  8. Iterator i = fileItems.iterator();
  9. while (i.hasNext()) {
  10. FileItem fi = (FileItem) i.next();
  11. String fileName = fi.getName();
  12. if (fileName != null ) {
  13. File fullFile = new File(fi.getName());
  14. File savedFile = new File(uploadPath, fullFile.getName());
  15. fi.write(savedFile);
  16. }
  17. }
  18. System.out.println( "upload succeed" );
在JSP页面 ,form表单 method必须设置为post,并且要设置enctype=”multipart/form-data”:<%@ page contentType="text/html; char set =UTF-8" %> <title> 上传文件 </title> </HEAD> <form act 更改文件的 编码 ,要利用第三方jar包:cpdetector_1.0.10.jar,其 它依赖于jar包:antlr-2.7.4.jar, char det-1.0.jar,jargs-1.0.jar,获取文件的 编码 :public static String guessEncoding(String file Path) { Char set Printer cp = new Char set Printer();... 解决 HttpClient File Part 上传文件 使用 中文名称 文件名 乱码 问题 ,我当时在网上找了一遍,网上都是 public class Custom File Part extends File Part { public Custom File Part(String file name, File file ) throws File NotFoundEx... File Part支持的文件类型包括:图像(JPG、PNG、GIF、BMP)、文档(DOC、DOCX、PPT、PPTX、XLS、XLSX、PDF)、音频(MP3、WAV、WMA)、视频(MP4、AVI、WMV)、网页(HTML、HTM)以及压缩文件(ZIP、RAR)。 在 Java 有时生成文件之后让前端下载,获取的 文件名 存在 文或者是空格的时候,下载的 文件名 称出现 乱码 。这个 问题 困扰了我好久,用过各种的转码都无济于事。在后来终于 解决 了,在这里和大家分享一下,其实也就是加一个方法判断浏览器的的 问题 。 1:都是 使用 的new Fi... * To change this template, choose Tools | Templates * and open the template in the editor. package upload; import java .io. File ; import java .io.IOException; import org.apache.commons.httpc 使用 httpclient 上传文件 可能遇到 API 变更的 问题 ,列表参数传递的 问题 乱码 问题 等等。本文介绍了 使用 httpclient 4.5 版本 上传文件 的方法,并提供示例代码 public void upload(String local File ){         Closeable HttpClient httpClient = null;         CloseableHttpResponse response = null;         try { httpClient = HttpClient s.createDefault