日期:2014-05-20  浏览次数:20766 次

非常奇怪的struts上传文件乱码问题,快疯了~
我写了个很简单的上传文件的jsp页面,提交到一个action,然后将上传文件保存在D盘目录下。
问题如下:
  所有的任何类型的文件都可以上传和正常使用,也没有乱码问题出现。但是那些Z打头的文件,如“重要命令.txt”,"局部.txt"(无双引号)上传之后文件名就会变为乱码,但其他相同目录下的中文名称的txt文件都正常。更奇怪的是把Z打头的文件放到桌面之后再上传就正常了,放到其他盘,甚至是c盘,都会出现乱码文件名。

  照理说如果是乱码问题应该是统一的问题啊,怎么会跟上传路径有关?怎么其他的都正常就Z打头的不正常呢?action代码如下:
   

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException {
// TODO Auto-generated method stub
getfileForm getfile = (getfileForm) form;
response.setCharacterEncoding("utf-8");
FormFile file = getfile.getFile();
if (file == null || file.getFileSize() == 0) {
PrintWriter out = response.getWriter();
out.write("上传了空的文件!");
return null;
}
String filename=file.getFileName();
System.out.println(filename);
//filename=new String(filename.getBytes("gbk"),"UTF-8");//这句话加了也没用,乱码变成了?号。
InputStream in = file.getInputStream();
OutputStream output = new FileOutputStream("d:/" + filename);//放在了D盘目录下
byte[] b = new byte[1024];
int byteread = 0;
while ((byteread = in.read(b)) != -1) {
output.write(b);
}
output.close();
in.close();
return null;
}

------解决方案--------------------
要是乱码问题 我帖子有过滤器您可以看看

您放到D盘 要在放到别的盘 可能你要设置一下



上传问题有可能是您的权限的问题
InputStream
OytputStream

这有有一些只读 只写 您设置一下!!!


------解决方案--------------------
查查资料,跟容器处理请求的编码方式也有关,可能需要改容易的配置,例如tomcat
------解决方案--------------------
你的response编码是UTF8,但你的request编码呢?