用servlet使用DiskFileUpload做一个普通文件上传, 可是上传得到的文件名总是乱码,问题在哪里??页面用的是html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件上传</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css"> </head>
<body>
<form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
<div align="center">
<fieldset style="width:50%;">
<legend>上传文件</legend><br/>
<div class="line">
<div align="left" class="leftDiv">上传文件</div>
<div align="left" class="rightDiv">
<input type="file" name="file1" class="text">
</div>
</div>
.........
</fieldset>
</div>
</form>
</body>
</html>
下面是servlet:package com.sfd.servlet;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;public class UploadServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
//....
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { response.setCharacterEncoding("UTF-8");
//request.setCharacterEncoding("UTF-8");
response.setContentType("text/html"); DiskFileUpload diskFileUpload = new DiskFileUpload();
try {
List<FileItem> list = diskFileUpload.parseRequest(request); for (FileItem fileItem : list) { if (!fileItem.isFormField()) {
if ("file1".equals(fileItem.getFieldName())) {
File remoteFile = new File(new String(fileItem.getName().getBytes(), "UTF-8")); File file = new File(this.getServletContext().getRealPath("upload"), remoteFile.getName());
// if (file1.exists()) {
// file1.delete();
// }
System.out.println("file_Path: " + file.toString());
file1.getParentFile().mkdirs();
file1.createNewFile();
InputStream ins = fileItem.getInputStream();
OutputStream ous = new FileOutputStream(file1);
byte[] buffer = new byte[1024];
int len = 0;
while((len = ins.read(buffer)) > -1) {
ous.write(buffer, 0, len);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}打印语句:
file_Path: D:\Program Files\tomcat\webapps\servlet\attachment\δ????.jpgservletjavaDiskFileUpload 文件上传乱码
<html>
<head>
<title>文件上传</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css"> </head>
<body>
<form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
<div align="center">
<fieldset style="width:50%;">
<legend>上传文件</legend><br/>
<div class="line">
<div align="left" class="leftDiv">上传文件</div>
<div align="left" class="rightDiv">
<input type="file" name="file1" class="text">
</div>
</div>
.........
</fieldset>
</div>
</form>
</body>
</html>
下面是servlet:package com.sfd.servlet;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;public class UploadServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
//....
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { response.setCharacterEncoding("UTF-8");
//request.setCharacterEncoding("UTF-8");
response.setContentType("text/html"); DiskFileUpload diskFileUpload = new DiskFileUpload();
try {
List<FileItem> list = diskFileUpload.parseRequest(request); for (FileItem fileItem : list) { if (!fileItem.isFormField()) {
if ("file1".equals(fileItem.getFieldName())) {
File remoteFile = new File(new String(fileItem.getName().getBytes(), "UTF-8")); File file = new File(this.getServletContext().getRealPath("upload"), remoteFile.getName());
// if (file1.exists()) {
// file1.delete();
// }
System.out.println("file_Path: " + file.toString());
file1.getParentFile().mkdirs();
file1.createNewFile();
InputStream ins = fileItem.getInputStream();
OutputStream ous = new FileOutputStream(file1);
byte[] buffer = new byte[1024];
int len = 0;
while((len = ins.read(buffer)) > -1) {
ous.write(buffer, 0, len);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}打印语句:
file_Path: D:\Program Files\tomcat\webapps\servlet\attachment\δ????.jpgservletjavaDiskFileUpload 文件上传乱码
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
建议楼主 servlet加过滤器
根据很多项目案例下各种情况总结而来。http://blog.csdn.net/nutony/article/details/7185043