解决 FileUpload上传 中文乱码问题
时间: 2023-08-21 07:04:16 浏览: 224
jsp SmartUpload 中文乱码问题解决.docx
当我们在使用 FileUpload 组件上传文件时,如果文件名包含中文字符,那么就会出现乱码的问题。这是因为在上传过程中,浏览器会将文件名进行 URL 编码,而在服务器端接收到文件时,需要将文件名进行 URL 解码,如果解码方式不正确,就会出现乱码。
解决这个问题的方法是在服务器端对文件名进行 URL 解码。具体步骤如下:
1. 获取上传的文件名。
2. 对文件名进行 URL 解码,使用 java.net.URLDecoder 类的 decode() 方法进行解码。解码时需要指定正确的字符编码,通常情况下使用 UTF-8 编码即可。
```java
String fileName = URLDecoder.decode(fileItem.getName(), "UTF-8");
```
3. 使用解码后的文件名保存上传的文件。
完整代码示例:
```java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 创建文件上传组件
ServletFileUpload fileUpload = new ServletFileUpload();
// 解析请求,获取上传的文件列表
List<FileItem> fileItemList = fileUpload.parseRequest(request);
// 遍历文件列表
for (FileItem fileItem : fileItemList) {
// 如果是普通表单字段,直接输出字段名和字段值
if (fileItem.isFormField()) {
System.out.println(fileItem.getFieldName() + ": " + fileItem.getString());
} else { // 如果是上传的文件
// 获取上传的文件名
String fileName = URLDecoder.decode(fileItem.getName(), "UTF-8");
// 使用解码后的文件名保存上传的文件
fileItem.write(new File("/path/to/save/" + fileName));
}
}
}
```
阅读全文