DiskFileUpload上传中文文件名的文件,上传后,文件名为乱码?

sandxu 2006-12-07 03:14:42
html:
<HTML>
<HEAD>

<meta http-equiv="Content-Type" content="text/html; charset=GBK">

<TITLE>File Upload Page</TITLE>
</HEAD>
<BODY>Upload Files
<FORM name="filesForm" action="ProcessFileUpload.jsp" method="post" enctype="multipart/form-data">
File 1:<input type="file" name="file1"/><br/>

<input type="submit" name="Submit" value="Upload Files"/>
</FORM>
</BODY>
</HTML>

jsp:

<%@ page contentType="text/html; charset=gb2312" language="java"
import="org.apache.commons.fileupload.*,
org.apache.commons.fileupload.FileItem,
java.util.List,
java.util.Iterator,
java.io.*"
%>
<%@ page import="org.apache.commons.io.*" %>
<html>
<head>

<title>Process File Upload</title>
</head>
<%

System.out.println("Content Type ="+request.getContentType());
try{
DiskFileUpload fu = new DiskFileUpload();
// 设置允许用户上传文件大小,单位:字节
fu.setSizeMax(-1);
// 设置最多只允许在内存中存储的数据,单位:字节

System.out.println("encoding:"+request.getCharacterEncoding());

fu.setHeaderEncoding(request.getCharacterEncoding());
fu.setSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fu.setRepositoryPath("e:\\temp");
//开始读取上传信息
List fileItems = fu.parseRequest(request);
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
//忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String name = item.getName();

System.out.println(name);
name=FilenameUtils.getName(name);
System.out.println(new String(name.getBytes("gb2312"), "iso8859_1"));
System.out.println("name2/:"+name);
String storePath="e:\\UploadTest";
File store= new File(storePath);
if(!store.exists()){
if(store.mkdirs())
System.out.println("文件目录成功!");
}
String name1=storePath+File.separator+ name;
System.out.println(name1);
File test=new File(name1);
item.write(test);

}

}
} catch(Exception e){
e.printStackTrace();
}

%>
<body>
成功!!
</body>
</html>

上传后中文文件名变成: 海军通信军代表信息系统用户需求说明书

怎么解决阿?如何转码? 我request得到编码就是gb2312呀
fu.setHeaderEncoding(request.getCharacterEncoding());已经设置为gb2312了
...全文
717 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
YuLimin 2006-12-08
  • 打赏
  • 举报
回复
<input type="file" name="itemFile" class="input_style" onChange="document.all.itemFileName.value=getFileName(this.value)" size="50"/>

<input type="hidden" name="itemFileName">

JS:

function getFileName(filePath)
{
var theFile = filePath;//.toLowerCase();
var fileName = "";

if(theFile.length == 0)
{
showInfo("请选择所要上传的文件!");
}
else
{
if(theFile.indexOf(".") > 0)// && theFile.length == theFile.indexOf(".") + 4
{
fileName = theFile.substring(theFile.lastIndexOf("\\") + 1,theFile.length);
}
else
{
showInfo("你所指定的文件不是正确文件,请选择正确的文件,扩展名应当为XXX\t");
}
}
//showDebugInfo("fileName:" + fileName);
return fileName;
}
YuLimin 2006-12-08
  • 打赏
  • 举报
回复
做个hidden的域,把文件名保存下来,然后一起提交过去,单独取到这个文件名的值即可。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧