解决HttpClient的FilePart上传文件中使用中文名称文件名乱码问题
2013-04-19 16:58
2041 查看
[java] view
plaincopy
String targetUrl = "http://localhost:8080/Test";
PostMethod filePost = new PostMethod(targetUrl) {//这个用来中文乱码
public String getRequestCharSet() {
return "UTF-8";//
}
};
try {
HttpClient client = new HttpClient();
File file = new File("c:/新闻.xml");
Part[] parts = new Part[] {new CustomFilePart(file.getName(), file)};
filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
int statuscode=client.executeMethod(filePost);
if(statuscode == HttpStatus.SC_OK) {
System.out.println("添加文件成功");
} else {
System.out.println("添加文件失败");
}
} catch (Exception ex) {
ex.printStackTrace();
}
[java] view
plaincopy
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.util.EncodingUtil;
/**
*解决中文文件名乱码
*/
public class CustomFilePart extends FilePart {
public CustomFilePart(String filename, File file)
throws FileNotFoundException {
super(filename, file);
}
protected void sendDispositionHeader(OutputStream out) throws IOException {
super.sendDispositionHeader(out);
String filename = getSource().getFileName();
if (filename != null) {
out.write(EncodingUtil.getAsciiBytes(FILE_NAME));
out.write(QUOTE_BYTES);
out.write(EncodingUtil.getBytes(filename, "utf-8"));
out.write(QUOTE_BYTES);
}
}
}
而服务端使用apache的commonfileupload:
[java] view
plaincopy
File tempfile = new File(System.getProperty("java.io.tmpdir")); // 采用系统临时文件目录
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
diskFileItemFactory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
diskFileItemFactory.setRepository(tempfile); // 设置缓冲区目录
ServletFileUpload fu = new ServletFileUpload(diskFileItemFactory);
fu.setSizeMax(4194304); // 限制文件大小最大为4M
List fileItems = fu.parseRequest(request);
Iterator i = fileItems.iterator();
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
String fileName = fi.getName();
if (fileName != null) {
File fullFile = new File(fi.getName());
File savedFile = new File(uploadPath, fullFile.getName());
fi.write(savedFile);
}
}
System.out.println("upload succeed");
plaincopy
String targetUrl = "http://localhost:8080/Test";
PostMethod filePost = new PostMethod(targetUrl) {//这个用来中文乱码
public String getRequestCharSet() {
return "UTF-8";//
}
};
try {
HttpClient client = new HttpClient();
File file = new File("c:/新闻.xml");
Part[] parts = new Part[] {new CustomFilePart(file.getName(), file)};
filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
int statuscode=client.executeMethod(filePost);
if(statuscode == HttpStatus.SC_OK) {
System.out.println("添加文件成功");
} else {
System.out.println("添加文件失败");
}
} catch (Exception ex) {
ex.printStackTrace();
}
[java] view
plaincopy
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.util.EncodingUtil;
/**
*解决中文文件名乱码
*/
public class CustomFilePart extends FilePart {
public CustomFilePart(String filename, File file)
throws FileNotFoundException {
super(filename, file);
}
protected void sendDispositionHeader(OutputStream out) throws IOException {
super.sendDispositionHeader(out);
String filename = getSource().getFileName();
if (filename != null) {
out.write(EncodingUtil.getAsciiBytes(FILE_NAME));
out.write(QUOTE_BYTES);
out.write(EncodingUtil.getBytes(filename, "utf-8"));
out.write(QUOTE_BYTES);
}
}
}
而服务端使用apache的commonfileupload:
[java] view
plaincopy
File tempfile = new File(System.getProperty("java.io.tmpdir")); // 采用系统临时文件目录
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
diskFileItemFactory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
diskFileItemFactory.setRepository(tempfile); // 设置缓冲区目录
ServletFileUpload fu = new ServletFileUpload(diskFileItemFactory);
fu.setSizeMax(4194304); // 限制文件大小最大为4M
List fileItems = fu.parseRequest(request);
Iterator i = fileItems.iterator();
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
String fileName = fi.getName();
if (fileName != null) {
File fullFile = new File(fi.getName());
File savedFile = new File(uploadPath, fullFile.getName());
fi.write(savedFile);
}
}
System.out.println("upload succeed");
相关文章推荐
- 解决HttpClient的FilePart上传文件中使用中文名称文件名乱码问题
- 解决httpclient上传文件的时候中文文件名乱码的问题
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- HttpClient 4.3.* 上传带中文文件名文件文件名乱码问题的解决
- 解决python中用zipfile解压缩文件时中文文件名乱码的问题
- PHP文件上传并解决中文文件名乱码问题
- 使用edtftpnet上传文件到Serv-U出现乱码的问题,并且不能创建中文文件名或文件夹。
- struts使用html:file上传文件的时候文件名乱码解决
- httpclient上传文件及文件名中文乱码问题
- 解决上传文件时服务端中文文件名乱码问题
- 解决上传文件时服务端中文文件名乱码问题
- 使用enterprisedt上传到ftp服务器中文文件名异常、乱码问题解决
- 使用Content-Disposition: attachment; filename=FILENAME,在Firefox浏览器中下载文件,文件名中文乱码问题解决。
- 解决ASIHTTP setFile上传文件后中文乱码问题
- Java Web中使用JSPSmartUpload控件实现文件的上传和下载(解决了中文乱码问题)(JSP页面采用GBK编码)
- 解决COS、FileUpload上传文件时中文文件名乱码问题
- 中文乱码问题(使用Servlet3.0新特性实现文件上传——上传文件名中文乱码问题)
- Java Web中使用JSPSmartUpload控件实现文件的上传和下载(解决了中文乱码问题)(JSP页面采用GBK编码)
- 使用FPT上传下载文件和解决中文名文件乱码问题