struts 文件上传成功之后的问题

ccqsk 2006-09-11 03:07:57
我用struts的formfile实现上传.如果文件的名称有汉字的话,上传之后则文件名称的汉字部分为乱码!如新建 Microsoft Word 文档.doc变成了鏂板缓 Microsoft Word 鏂囨。.doc
这个如何解决啊?是不是要要把文件名的编码uft-8用setcontenttype()设成gb2312?请大家指教!
...全文
832 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangjun025 2006-09-27
  • 打赏
  • 举报
回复
不需要啊,就用struts标准上传组件,在上传前增加个文字过滤器就可以了
package com.sei.filter;

import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;

public class SetCharacterEncodingFilter implements Filter {

protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable;

public SetCharacterEncodingFilter() {
this.encodingName = "UTF-8";
this.enable = false;
}

public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
loadConfigParams();
}

private void loadConfigParams() {
//encoding
this.encodingName = this.filterConfig.getInitParameter("encoding");
//filter enable flag...
String strIgnoreFlag = this.filterConfig.getInitParameter("enable");
if (strIgnoreFlag.equalsIgnoreCase("true")) {
this.enable = true;
} else {
this.enable = false;
}
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(this.enable) {
request.setCharacterEncoding(this.encodingName);
}
chain.doFilter(request, response);
}

public void destroy() {
}

}


web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.sei.filter.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
ccqsk 2006-09-15
  • 打赏
  • 举报
回复
smartupload是jsp上传组件要去网上下载jspsmartupload.jar包
formfile即org.apache.struts.upload.formfile包.不过是struts自带的无须下载.
fileupload要到网上下载commons-fileupload-1.1-dev.jar.还用到commons-io-1.1-dev.jar。
还有个cos组件不太清楚
以上说的对吗?
我用struts不知选什么组件好啊!谁能比较下?

Cuealive 2006-09-14
  • 打赏
  • 举报
回复
用fileupload啊。。
AJNS 2006-09-13
  • 打赏
  • 举报
回复
在我的调试过程中,linux里的jsp页只有用uft-8编码,网页中的静态中文(即不是从数据库或是表单内读出来的中文)才不会是乱码。
ccqsk 2006-09-13
  • 打赏
  • 举报
回复
we are continue!
ccqsk 2006-09-13
  • 打赏
  • 举报
回复
我为了使我的web应用国际化所有的页面都采用的uft-8的编码?如果我不去国际化而是只有中文的资源文件的话,所有页面用gb2312编码能解决这个问题吗?
lovest317 2006-09-13
  • 打赏
  • 举报
回复
呵呵 同意楼上同志们的说法
AJNS 2006-09-13
  • 打赏
  • 举报
回复
是不是乱码环境很重要
如果在windows下用gb2312就没有乱码
如果在linux下使用,utf-8,就会有乱码
ccqsk 2006-09-13
  • 打赏
  • 举报
回复
we are continue!
ccqsk 2006-09-12
  • 打赏
  • 举报
回复
谁有解决此类问题的经历不妨来说说啊!我会一直关注啊!
ccqsk 2006-09-12
  • 打赏
  • 举报
回复
我看到有人问file和text一起上传的时候,有enctype="multipart/form-data"时能上传但text数据会变成乱码而没有enctype时就不能上传但是text没有乱码了!后来有人说用过滤器就解决了.由此想到我的问题可能出在enctype这里了.可以考虑将上传文件的文件名用过滤器试下.
ccqsk 2006-09-12
  • 打赏
  • 举报
回复
楼上的用的什么方法做的上传啊?也是formfile吗?如果是和我一样的方法的话贴下你的源程序吧
chendebing 2006-09-12
  • 打赏
  • 举报
回复
我的就没有做任何转换啊,很好啊!没变成乱码!
ccqsk 2006-09-12
  • 打赏
  • 举报
回复
we are continue!
AJNS 2006-09-11
  • 打赏
  • 举报
回复
无论是用
1.request.setCharacterEncoding("gb2312");
还是用new String,还是同时用,都没办法解决乱码问题
但是在没有调用上传控件的页面采用上面的方法就不存在乱码了
说明上传控件肯定是有一定问题
改上传控件源码的方法在网上有成功的案例,但我还没有试过。
如果谁那儿有smartupload的源码,麻烦给一份,谢谢了
"H a l f H o u r @ s o h u . c o m"
ccqsk 2006-09-11
  • 打赏
  • 举报
回复
我觉得要解决这个问题应先弄清楚为什么中文会变成乱码.
我开始认为是编码的问题因为书上说IE发送请求时默认的是ISO-8859-1的编码,要正确的读取用户发送的中文数据就要编码转换.有两种方法:
1.request.setCharacterEncoding("gb2312");
2.clientData=new String(clientData.getBytes("ISO-8859-1"),"gb2312");
因为上传系统用户发送的中文数据(文件名)包含在表单的file值(文件绝对路径)的一部分,和通过表单的text发送中文数据的情况不一样.
我采取的办法是在文件上传的action中,在读取文件之前用方法2,将上传的文件名(formfile.getfilename获得)转换成gb2312,然后再用流读取上传文件,写入到目标路径.但还是不行.也许要用方法1吧.欢迎大家讨论啊!
AJNS 2006-09-11
  • 打赏
  • 举报
回复
我尝试过这种方法了,用上传组件没有用到的表单值传递文件名还是不行
无论是post还是get,只要传到到上传组件的页面中文就成乱码(smartupload控件是用javabean声明的,页面编码用的UTF-8)
caichongbo 2006-09-11
  • 打赏
  • 举报
回复
上传文件后最好不要用以前的名称,可以自己写方法给上传文件一个新的不重复的名称
AJNS 2006-09-11
  • 打赏
  • 举报
回复
我也遇到多类似问题
linux+tomcat+jsp 没用struct,上传组件用的是,smartupload
也是上传后中文名成乱码.至今没有解决这个问题
转换编码的方法不行.网上的解决方案是改smartupload源码,重新编译(smartupload上传用的编码对中文支持有问题).但是现在找不到smartupload的源码,官网也关了.
我暂时是把网站就放在windows下使用,这样还没问题,但不是长久之际.
希望有人能解决一下,谢在先了
请下载最新的, http://download.csdn.net/source/1878200 ----------------------------------------------------------------- 个人知识管理系统 数据库:MySQL 5.0 Struts2.0 + Spring + Hibernate + DWR 对于三大框架目前还在学习阶段,做得不好的地方欢迎来mail指正yukiceo@126.com,或http://blog.csdn.net/yukiceo 每天面对大量的知识,时间一长,容易造成某些知识点的生疏或者遗忘,本系统方便对知识进行分类收录,并结合人类遗忘规律,及时对相应的知识点进行提示复习。 提示复习的时间分别是: 第一次:10 分钟, 第二次:30分钟, 第三次:4 小时 第四次:12小时 第五次:24小时 第六次:3 天 第七次:7 天 之后 :每15天 当然如果没有及时更新复习的话,下一次的复习更新时间会在上一次复习更新后顺延。 在Ajax更新复习次数时通常都会第一次失败,再点一次就能成功了,第一次失败是因为Request 取到了NULL值,因为对三大框架无缝组合还不太熟悉,如果你知识别忘了告诉我哦(yukiceo@126.com) 由于对页面样式了解不多,所以写出来的样式目前只在IE上运行良好,在火狐上效果不佳,并且在火狐上提示复习这一块一直出不来,目前也在研究CSS,希望能写出适合大多数浏览器的样式。 用户可建立自己的知识分类,对于私密信息(比喻日记等)可增加访问权限,只有登陆用户才能看到,非登陆用户只能浏览公开信息,以及增加新的信息,但无权修改以删除信息,用户权限拦截采用了Struts2的自定义拦截器 用户只有一个,就是自己,所以用户采用硬编码方式,但是密码较验采用了MD5加密码方式,在LoginAction中,可以自行修改成自己的(暂时用户名yukiceo,密码yukiceo) 采用了FCKeditor在线文本编辑器,用FCKeditor上传文件时还存在有问题,不知道是不是配置存在问题,但是图片文件利用Struts2的action上传到服务器,因为有其他附件文件要上传,并且要保存文件信息,在删除文章时要把上传的文件一起删除掉,但在级联删除时子类对象中包含的文件还不能删除掉,有想法要写一个专门的模块来提示删除这一部分文件

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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