`
jack533
  • 浏览: 4374 次
  • 性别: Icon_minigender_1
  • 来自: 广西
最近访客 更多访客>>
社区版块
存档分类

Struts 上传组件中文乱码问题

阅读更多
Struts上传实现很简单,不需要自己用什么common_fileupload包,struts中用一个FormFile的接口用到了common_fileupload包的东西。在StrutsForm中只要定义一个FormFile类型的属性就行了。


程序代码
protected FormFile file;
public FormFile getFile() {
    return file;
}
public void setFile(FormFile theFile) {
    this.file = theFile;
}



uploadFile.jsp文件:

程序代码
<html:form action="/uploadFile" enctype="multipart/form-data">
File Description : <html:text property="description"/>
<br />
Please select the file that you would like to upload: <br /><html:file property="file" /></p>
<html:submit/>
</html:form>


在jsp的Form定义里面 “enctype="multipart/form-data"”不能忘记,不然会出现一个“BeanUtils.populate”属性赋值的错误。


程序代码
UploadFileForm uploadFileForm = (UploadFileForm) form;   
String desciption = uploadFileForm.getDescription();
       
FormFile file = uploadFileForm.getFile();       
String fileName = file.getFileName();
String contentType = file.getContentType();
String size = (file.getFileSize() + " bytes");
String filePath = null;
try {
    stream = file.getInputStream();// ームホトシ�カチネ�
    filePath = getServlet().getServletContext().getRealPath("/upload");
    OutputStream bos = new FileOutputStream(filePath + "/"+ file.getFileName());
    System.out.println(filePath+"\\"+file.getFileName());
    int bytesRead = 0;
    byte[] buffer = new byte[8192];
    while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
        bos.write(buffer, 0, bytesRead);       
    }
    bos.close();
    stream.close();
} catch (Exception e) {
    // do some thing
}   
info = "The file uploaded to the path:\""+filePath+"\"";
// log the success infomation
file.destroy();


这样文件上传基本就可以成功了,但是存在中文乱码问题。

在Action的excute方法里面设置

程序代码
String encoding = "gb2312";
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset=" + encoding + "");

但是利用form的get方法取出来的值仍然是乱码,后来知道了,Struts从request里利用BeanUtils.populate把值赋给form的时候已经是乱码的,excute方法里面设置是没用的,所以要在赋值之前进行编码转换,所以下面两种方法才是有效的:

1.在filter里面对request,response的编码进行设定
2.在RequestProcessor.process()里进行编码设定

方法一:filter过滤

程序代码
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {   
    String encoding = "gb2312";
    request.setCharacterEncoding(encoding);
    response.setContentType("text/html;charset=" + encoding + "");
               
    filterChain.doFilter(request,response);
}

web.xml中

程序代码
<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>xxx.xxxx.xxxx.EncodingFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>


方法二:自己写一个RequestProcessor,

程序代码
public class EncodingProcessor extends RequestProcessor {
    public void process(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        String encoding = "gb2312";
        request.setCharacterEncoding(encoding);
        response.setContentType("text/html;charset=" + encoding + "");
        super.process(request, response);
    }
}


并在struts-config.xml里设定:

程序代码
<controller processorClass="xxx.xxxx.xxxx.EncodingProcessor" />

出自 http://www.lurenjia.net/article.asp?id=184
分享到:
评论
1 楼 jie523314 2011-01-20  

相关推荐

    struts2上传下载 解决中文文件名乱码

    Struts2文件上传组件在处理文件名时,如果不进行适当的编码设置,也会出现同样的问题。 解决这个问题的关键步骤如下: 1. **配置Struts2拦截器**:Struts2的文件上传拦截器(`org.apache.struts2.interceptor....

    Ext3.2 + struts 文件上传实例

    在本文中,我们将深入探讨如何使用Ext3.2与Struts框架实现文件上传功能,同时解决中文乱码问题。这两个技术结合在一起,可以为Web应用提供高效、稳定的文件上传解决方案。 首先,Ext3.2是一个JavaScript库,它提供...

    02_张孝祥09年Struts视频_文件上传单元

    04.用struts获取上传文件名和解决中文乱码 05.保存用struts获取的上传文件内容 06.分析文件上传时的一个安全问题 07.分析高质量项目该如何处理文件上传 08.处理不上传文件时的情况 09.在配置文件中配置上传文件的...

    11_张孝祥09年Struts视频_文件上传单元

    04.用struts获取上传文件名和解决中文乱码 05.保存用struts获取的上传文件内容 06.分析文件上传时的一个安全问题 07.分析高质量项目该如何处理文件上传 08.处理不上传文件时的情况 09.在配置文件中配置上传文件的...

    flex上传下载 并解决中文乱码

    在本主题中,我们将深入探讨如何使用Flex进行文件上传和下载,并解决过程中可能出现的中文乱码问题。 一、Flex文件上传 1. Flex组件:Flex中可以使用`FileReference`组件来实现文件上传。用户通过选择文件后,`...

    jspsmartupload中文乱码解决版

    `jspsmartupload`是一个专门用于Java Web应用程序的文件上传组件,它可以帮助开发者实现用户友好的文件上传功能。然而,在处理中文文件名或者中文内容时,由于编码不一致或处理不当,可能导致乱码。本篇将详细讨论...

    jspSmartUpload,上传下载,解决中文乱码jspSmartUpload,SmartUpload

    `jspSmartUpload`是一个基于Java的文件上传组件,它提供了强大的文件上传和管理功能,特别对于处理中文文件名有着独特的解决方案。在使用`jspSmartUpload`时,我们需要注意以下关键知识点: 1. **编码设置**:`jsp...

    乱码处理操作类

    在提供的"乱码处理"标签中,我们可以推测这个压缩包可能包含了一个自定义的Java类或组件,用于处理SSH框架下的乱码问题。这个类可能会覆盖上述的一些关键步骤,或者提供更便捷的解决方案来统一处理乱码问题。 总的...

    struts学习笔记

    本文将围绕Struts的核心知识点展开,包括文件上传、复选框值的处理以及解决中文乱码问题。 1. **Struts 文件上传** 在Struts中,文件上传是通过内置的Commons-FileUpload组件实现的。`FormFile` 是Struts提供的一个...

    struts2.0字符编码使用过滤器

    Struts2.0字符编码问题在开发Web应用时是一个常见的挑战,尤其是在处理用户输入时,如果编码不统一,可能会导致乱码现象。本示例通过使用过滤器(Filter)来解决这个问题,确保了数据在传输过程中的正确编码,从而...

    uploadbean上传所需要的jar

    5. **中文文件名支持**:UploadBean对中文文件名的处理更加友好,避免了在上传过程中出现乱码问题,这是相对于其他上传组件的一大改进。 6. **文件重命名**:如果服务器上存在同名文件,UploadBean可以自动重命名...

    Struts2常量的具体用法实例

    此设置确保了Struts2在处理国际化字符串时能够正确解析和显示各种语言的字符,避免乱码问题。 #### 2. struts.action.extension 这个常量用来指定Struts2的Action扩展名,默认为“action”。然而,如示例中所示,将...

    jspSmartUpload完整的上传下载代码及一些实用的方法

    JSPSmartUpload 是一个在Java Web开发中常用的文件上传组件,它提供了方便的API来处理文件上传和下载的操作。在使用 JSPSmartUpload 时,可能会遇到一些常见问题,如中文文件名乱码以及如何防止重复下载导致积分多次...

    上传与下载

    - `fileupload`可能是某个具体的文件上传组件或类库的名称,比如Apache的Commons FileUpload库,它提供了解决文件上传的API,帮助开发者处理文件上传的细节,如内存阈值、临时存储路径等。 在实际开发中,我们不仅...

    flex + servlet 多文件上传

    总的来说,这个示例展示了如何使用`Flex`作为前端,结合`Servlet`(可能在`Struts`框架下)作为后端,实现多文件上传功能,并解决了常见的中文乱码问题。这对于需要构建交互性强且支持多文件上传的Web应用来说,是一...

    单文件与多文件上传uploadify控件的java版本

    在IT行业中,文件上传是网页应用中常见的功能之一,尤其在处理用户提交的图片或文档时。...在实际项目中,还需要考虑错误处理、安全性(如防止文件覆盖、非法文件类型)以及性能优化(如分块上传、断点续传)等问题。

    java_web上传教程

    然后,作者引入了 Commons-FileUpload,这是一种开源组件,可以上传大文件,并且 Struts 也采用它处理上传。 SmartUpload 的使用方法: 1. 下载 smartupload.jar 文件,放在 webroot 下的 lib 目录下。 2. 在代码...

    jspsmartupload

    JSPSmartUpload是一个用于Java Web应用程序的上传组件,它提供了处理文件上传的强大功能,尤其在处理大文件、多文件上传以及处理各种编码问题方面表现出色。在这个“jspsmartupload”示例中,我们主要关注的是如何...

    jsp里面用cos进行文件上传

    对于使用JSP(JavaServer Pages)技术的开发者来说,实现文件上传的方法有很多,例如使用jspsmart公司的SmartUpload、Struts框架提供的组件等。本文将重点介绍如何使用Cos组件来实现文件上传功能。 #### Cos组件...

Global site tag (gtag.js) - Google Analytics