中文文件名上传乱码
2015-11-25 09:48
127 查看
原文:http://www.blogjava.net/duduli/archive/2008/11/11/239845.html
昨天让这个乱码问题弄了很久,一大早就开始想要怎么解决才好。
很简单上传页面,jsp上传页面代码
1
<form action="/struts2/UploadServlet" method="post" enctype="multipart/form-data">
2
用户名:<input type="text" name="username"><br>
3
密 码:<input type="password" name="password"><br>
4
文件1:<input type="file" name="file1"><br>
5
文件2:<input type="file" name="file2"><br>
6
<input type="submit" value="提交">
7
</form>
下面是UploadServlet代码
1
@SuppressWarnings("serial")
2
public class UploadServlet extends HttpServlet {
3
4
@SuppressWarnings({ "unchecked", "deprecation" })
5
public void doPost(HttpServletRequest request, HttpServletResponse response)
6
throws ServletException, IOException {
7
// 设置工厂
8
DiskFileItemFactory factory = new DiskFileItemFactory();
9
String path = request.getRealPath("/upload");
10
// 设置文件存储位置
11
factory.setRepository(new File(path));
12
// 设置大小,如果文件小于设置大小的话,放入内存中,如果大于的话则放入磁盘中
13
factory.setSizeThreshold(1024*1024);
14
15
ServletFileUpload upload = new ServletFileUpload(factory);
16
// 这里就是中文文件名处理的代码,其实只有一行,serheaderencoding就可以了
17
upload.setHeaderEncoding("utf-8");
18
/*String enCoding = request.getCharacterEncoding();
19
if(enCoding != null){
20
upload.setHeaderEncoding(enCoding);
21
}*/
22
23
try {
24
List<FileItem> list = upload.parseRequest(request);
25
for(FileItem item : list){
26
// 判断是不是上传的文件,如果不是得到值,并设置到request域中
27
// 这里的item.getfieldname是得到上传页面上的input上的name
28
if(item.isFormField()){
29
String name = item.getFieldName();
30
String value =item.getString("utf-8");
31
System.out.println(name);
32
System.out.println(value);
33
request.setAttribute(name, value);
34
}
35
// 如果是上传的文件,则取出文件名,
36
else{
37
String name = item.getFieldName();
38
String value = item.getName();
39
System.out.println(name);
40
System.out.println(value);
41
// 得到不要地址的文件名,不同的浏览器传递的参数不同,有的直接传递文件名,而又的把文件地址一起传递过来
42
// 使用substring方法可以统一得到文件名而不得到文件位置
43
int start = value.lastIndexOf("\\");
44
String fileName = value.substring(start + 1);
45
request.setAttribute(name, fileName);
46
// 写文件到path目录,文件名问filename
47
item.write(new File(path,fileName));
48
}
49
}
50
}
51
52
catch (FileUploadException e) {
53
e.printStackTrace();
54
} catch (Exception e) {
55
e.printStackTrace();
56
}
57
// 跳转到显示结果页面
58
request.getRequestDispatcher("upload/result2.jsp").forward(request, response);
59
}
60
61
}
用EL表达式显示输出
1
<body>
2
用户名:${requestScope.username } <br>
3
密 码:${requestScope.password } <br>
4
文件1 :${requestScope.file1 }<br>
5
文件2 :${requestScope.file2 }<br>
6
</body>
其实很简单的设置就可以把中文件上传,并正确显示正确的中文文件名。
在网上找了一点资料,但是都写得很少,没有把完整的写出来。
所以把它写出来,让大家少走点弯路。
昨天让这个乱码问题弄了很久,一大早就开始想要怎么解决才好。
很简单上传页面,jsp上传页面代码
1
<form action="/struts2/UploadServlet" method="post" enctype="multipart/form-data">
2
用户名:<input type="text" name="username"><br>
3
密 码:<input type="password" name="password"><br>
4
文件1:<input type="file" name="file1"><br>
5
文件2:<input type="file" name="file2"><br>
6
<input type="submit" value="提交">
7
</form>
下面是UploadServlet代码
1
@SuppressWarnings("serial")
2
public class UploadServlet extends HttpServlet {
3
4
@SuppressWarnings({ "unchecked", "deprecation" })
5
public void doPost(HttpServletRequest request, HttpServletResponse response)
6
throws ServletException, IOException {
7
// 设置工厂
8
DiskFileItemFactory factory = new DiskFileItemFactory();
9
String path = request.getRealPath("/upload");
10
// 设置文件存储位置
11
factory.setRepository(new File(path));
12
// 设置大小,如果文件小于设置大小的话,放入内存中,如果大于的话则放入磁盘中
13
factory.setSizeThreshold(1024*1024);
14
15
ServletFileUpload upload = new ServletFileUpload(factory);
16
// 这里就是中文文件名处理的代码,其实只有一行,serheaderencoding就可以了
17
upload.setHeaderEncoding("utf-8");
18
/*String enCoding = request.getCharacterEncoding();
19
if(enCoding != null){
20
upload.setHeaderEncoding(enCoding);
21
}*/
22
23
try {
24
List<FileItem> list = upload.parseRequest(request);
25
for(FileItem item : list){
26
// 判断是不是上传的文件,如果不是得到值,并设置到request域中
27
// 这里的item.getfieldname是得到上传页面上的input上的name
28
if(item.isFormField()){
29
String name = item.getFieldName();
30
String value =item.getString("utf-8");
31
System.out.println(name);
32
System.out.println(value);
33
request.setAttribute(name, value);
34
}
35
// 如果是上传的文件,则取出文件名,
36
else{
37
String name = item.getFieldName();
38
String value = item.getName();
39
System.out.println(name);
40
System.out.println(value);
41
// 得到不要地址的文件名,不同的浏览器传递的参数不同,有的直接传递文件名,而又的把文件地址一起传递过来
42
// 使用substring方法可以统一得到文件名而不得到文件位置
43
int start = value.lastIndexOf("\\");
44
String fileName = value.substring(start + 1);
45
request.setAttribute(name, fileName);
46
// 写文件到path目录,文件名问filename
47
item.write(new File(path,fileName));
48
}
49
}
50
}
51
52
catch (FileUploadException e) {
53
e.printStackTrace();
54
} catch (Exception e) {
55
e.printStackTrace();
56
}
57
// 跳转到显示结果页面
58
request.getRequestDispatcher("upload/result2.jsp").forward(request, response);
59
}
60
61
}
用EL表达式显示输出
1
<body>
2
用户名:${requestScope.username } <br>
3
密 码:${requestScope.password } <br>
4
文件1 :${requestScope.file1 }<br>
5
文件2 :${requestScope.file2 }<br>
6
</body>
其实很简单的设置就可以把中文件上传,并正确显示正确的中文文件名。
在网上找了一点资料,但是都写得很少,没有把完整的写出来。
所以把它写出来,让大家少走点弯路。
相关文章推荐
- 2015.11.23(利亚德在11点涨停,结果大笔进货,结果又下来了——被套)
- 数据库连接管理类
- ROC曲线与癌症分类
- 男程序猿CP女程序猿:有戏吗?
- C 语言中static的作用
- swift开发笔记16 - 使用xib自定义一个控件(复合控件)
- VS2015 WMware 内核调试设置: 基于网络接口
- AlarmManager的使用
- 海量数据处理
- 数组和集合(collection)调用syso输出时,结果不一致问题。
- nankai100_1
- 《FPGA全程进阶---实战演练》第一章之FPGA介绍
- HaiHongOJ 1003 God Wang
- jquery与后台进行数据交互--前台发单一数据对象,后台返回一个json字符串 serlet
- 什么是机器学习
- 多元Huffman编码问题
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- LA 4329 PingPong
- iOS开发中使用Quartz2D绘制上下文栈和矩阵的方法
- mysql 用户管理和权限设置