`

jspSmartUpload组件上传下载文件时中文乱码问题(转)

 
阅读更多

    这次用jspSmartUpload做文件上传下载,该组件默认是GBK编码,当上传的文件名为中文时,我将文件名getBytes()下,将GBK改成 UTF-8。测试了下,貌似没问题,突然有一次上传一文件时,发现最后几个字乱码,一直是??。在拿些文件测试,后来知道了是当文件名为中文奇数时,会乱 码,而且还上传不了。再做测试,找原因,查看字符的长度,转成16进制看结果。觉得是jspSmartUpload组件对中文支持不足的问题。

    在网上找解决方法。下了几个jar,都说解决中文乱码,彻底解决中文乱码!!!用到我这就都不管用,而且也看到很多回复说解决不了,乱码问题还是依旧!!!

    这次自己找到jspSm的源代码,参考了网上的意见,自己稍微修改了下。发现能解决中文乱码问题,分享给和我遇到同样问题的朋友们!!!

 

        1:当页面上传有参数时,中文会乱码,解决页面上中文参数乱码方法:

            修改类SmartUpload()中的upload()方法         

public void upload() throws ServletException,IOException,SmartUploadException {
        int i = 0;
        //boolean flag = false;
        boolean flag1 = false;
        //boolean flag2 = false;
        long l = 0L;
        //String s = "";//new String();
        //String s2 = "";//new String();
        String s4 = ""; //new String();
        String s5 = ""; //new String();
        String s6 = ""; //new String();
        String s7 = ""; //new String();
        String s8 = ""; //new String();
        String s9 = ""; //new String();
        String s10 = ""; //new String();
        m_totalBytes = m_request.getContentLength();
        m_binArray = new byte[m_totalBytes];
        int j;
        for(;i < m_totalBytes;i += j)
        {
            try
            {
                m_request.getInputStream();
                j = m_request.getInputStream().read(m_binArray,i,m_totalBytes - i);
            }
            catch(Exception exception)
            {
                throw new SmartUploadException("Unable to upload.");
            }
        }

        for(;!flag1 && m_currentIndex < m_totalBytes;m_currentIndex++)
        {
            if(m_binArray[m_currentIndex] == 13)
            {
                flag1 = true;
            }
            else
            {
                m_boundary = m_boundary + (char)m_binArray[m_currentIndex];
            }
        }
        if(m_currentIndex == 1)
        {
            return;
        }
        for(m_currentIndex++;m_currentIndex < m_totalBytes;m_currentIndex = m_currentIndex + 2)
        {
            String s1 = getDataHeader();
            m_currentIndex = m_currentIndex + 2;
            boolean flag3 = s1.indexOf("filename") > 0;
            String s3 = getDataFieldValue(s1,"name");
            if(flag3)
            {
                s6 = getDataFieldValue(s1,"filename");
                s4 = getFileName(s6);
                s5 = getFileExt(s4);
                s7 = getContentType(s1);
                s8 = getContentDisp(s1);
                s9 = getTypeMIME(s7);
                s10 = getSubTypeMIME(s7);
            }
            getDataSection();
            if(flag3 && s4.length() > 0)
            {
                if(m_deniedFilesList.contains(s5))
                {
                    throw new SecurityException("The extension of the file is denied to be uploaded (1015).");
                }
                if(!m_allowedFilesList.isEmpty() && !m_allowedFilesList.contains(s5))
                {
                    throw new SecurityException("The extension of the file is not allowed to be uploaded (1010).");
                }
                if(m_maxFileSize > 0L && (long)((m_endData - m_startData) + 1) > m_maxFileSize)
                {
                    throw new SecurityException("Size exceeded for this file : " + s4 + " (1105).");
                }
                l += (m_endData - m_startData) + 1;
                if(m_totalMaxFileSize > 0L && l > m_totalMaxFileSize)
                {
                    throw new SecurityException("Total File Size exceeded (1110).");
                }
            }
            if(flag3)
            {
                SmartFile file = new SmartFile();
                file.setParent(this);
                file.setFieldName(s3);
                file.setFileName(s4);
                file.setFileExt(s5);
                file.setFilePathName(s6);
                file.setIsMissing(s6.length() == 0);
                file.setContentType(s7);
                file.setContentDisp(s8);
                file.setTypeMIME(s9);
                file.setSubTypeMIME(s10);
                if(s7.indexOf("application/x-macbinary") > 0)
                {
                    m_startData = m_startData + 128;
                }
                file.setSize((m_endData - m_startData) + 1);
                file.setStartData(m_startData);
                file.setEndData(m_endData);
                m_files.addFile(file);
            }
            else
            {
                /**
                 * 原来的代码,当页面上要传入中文参数时,乱码。
                 */
                //String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1);
         
                /**
                  * 2008-10-28 carton修改,解决页面传入中文参数乱码
                  */

                String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1, "utf-8");
                m_formRequest.putParameter(s3,s11);
            }
            if((char)m_binArray[m_currentIndex + 1] == '-')
            {
                break;
            }
        }
    }

 

 

 

    2:当上传时文件名为中文时,解决中文乱码

 

    修改类SmartUpload()中的getDataHeader()方法

private String getDataHeader()
    {
        //boolean flag = false;
        int i = m_currentIndex;
        int j = 0;
        for(boolean flag1 = false;!flag1;)
        {
            if(m_binArray[m_currentIndex] == 13 && m_binArray[m_currentIndex + 2] == 13)
            {
                flag1 = true;
                j = m_currentIndex - 1;
                m_currentIndex = m_currentIndex + 2;
            }
            else
            {
                m_currentIndex++;
            }
        }

        /**
         * 原代码,当上传文件名为中文时,乱码
        */

        //String s = new String(m_binArray,i,(j - i) + 1);
        //return s;

        /**
         * 2008-10-28 carton 修改,解决上传文件中文乱码问题
         */
        Stirng s = null;
        try {
             s = new String(m_binArray,i,(j - i) + 1, "utf-8");
        } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
        }
        return s;
    }

 

 

 

分享到:
评论

相关推荐

    真正解决jspSmartUpload组件上传下载文件时中文乱码问题

    真正解决jspSmartUpload组件上传下载文件时中文乱码问题。以前在网上也找过!!!下载了些,都没能解决中文乱码问题!自己改了源代码,并做成jar包,直接用就可以。 另,我把File()类 改成了 SmartFile()类。详情请...

    jspSmartUpload 组件的上传下载完整实例

    下载即可运行,但是这个压缩包不支持中文名称的文件下载功能,我上传了一个可以下载中文的不会乱码的jspSmartUpload 组件,网址:http://download.csdn.net/detail/huahuahailang/4265620 照着使用,即可下载中文。

    jspSmartUpload组件(已解决中文乱码问题)

    然而,由于`jspSmartUpload`最初是由非中文开发者创建的,因此在处理包含中文字符的文件名时,可能会出现乱码问题,这给使用中文的开发者带来了困扰。 在描述中提到,这个问题已经得到了解决,意味着作者对`jsp...

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

    `jspSmartUpload`是一个专为解决此类问题设计的组件,它能够有效地处理中文乱码,确保文件上传和下载过程中的文件名正确显示。 `jspSmartUpload`是一个基于Java的文件上传组件,它提供了强大的文件上传和管理功能,...

    jspsmartupload.jar 可以处理下载时中文乱码问题

    `jspsmartupload.jar` 是一个专为Java Web开发设计的上传组件,它解决了在处理文件上传时可能出现的中文乱码问题。这个组件是许多Web应用程序中的重要工具,特别是那些需要用户上传包含中文字符的文件名或元数据的...

    jsp SmartUpload 中文乱码问题解决.docx

    jsp SmartUpload 中文乱码问题解决是指在使用 jsp 的 SmartUpload 组件进行文件上传下载时,遇到中文乱码问题的解决方法。在这篇文章中,我们将介绍如何解决 jsp 中 SmartUpload 中文乱码问题。 一、上传 在使用 ...

    应用jspSmartUpload 组件上传下载完整实例

    应用jspSmartUpload 组件上传下载完整实例 下载即可运行,但是这个压缩包不支持中文名称的文件下载功能,我上传了一个可以下载中文的不会乱码的jspSmartUpload 组件,网址:...

    jspSmartUpload组件(支持中文)

    总之,jspSmartUpload组件是Java Web开发中的一个重要工具,通过其修改版,开发者可以方便地处理包含中文字符的文件上传和下载任务,大大提升了用户体验。了解并熟练运用这个组件,能够使你在处理文件交互时更加...

    jspsmartUpload的上传下载的myeclipse工程(解决乱码)

    网上的许多jspsmartUpload组件要么未解决中文乱码,要么仅提供解决乱码的包,一些初学者甚至不知道如何导入myeclipse中。作者综合网上的各种资源,整合这个文件,希望对大家有所帮助。该文件直接解压导入工程即可...

    jspSmartupload已解决中文问题

    总结来说,`jspSmartupload` 是一个处理JSP和Servlet文件上传的实用工具,它已经解决了中文文件名的编码问题,提供了一套完整的文件上传和下载解决方案。通过这个组件,开发者可以轻松地在应用中实现文件上传功能,...

    [jspSmartUpload]------------>jspSmartUpload上传中文文件名 乱码问题

    标题中的“jspSmartUpload上传中文文件名乱码问题”是一个常见的技术挑战,特别是在处理Web应用程序时,特别是那些涉及用户上传文件的场景。JSP Smart Upload是早期流行的一个用于Java Web应用的文件上传组件,它...

    JSP SmartUpload上传文件乱码解决纪实+UploadBean上传解决方案.mht

    本篇文章将深入探讨这两个组件以及如何解决文件上传时出现的中文乱码问题。 首先,SmartUpload是一个强大的文件上传组件,它为JSP开发者提供了一种简单的方式来处理文件上传。然而,在实际应用中,我们可能会遇到...

    jspsmartupload,smartupload UTF8 版,解决乱码问题

    "jspsmartupload"和"smartupload UTF8版"是针对Java Web应用的文件上传组件,旨在简化文件上传操作,并解决多语言环境下的字符编码问题,特别是中文乱码问题。在这个场景下,我们主要关注两个核心知识点:...

    jspSmartUpload使用详解(上传下载组件)

    2. **解决下载时的中文乱码问题**:jspSmartUpload组件能够处理下载过程中可能出现的中文文件名乱码问题。如果遇到下载jspsmartupload.jar文件的问题,用户可以选择自行将解决乱码问题的代码嵌入到JSP文件中。 **...

    jspsmartupload中文乱码解决版

    在Web开发中,我们经常会遇到上传文件的问题,尤其是在处理包含中文字符的文件时,乱码问题时常出现。`jspsmartupload`是一个专门用于Java Web应用程序的文件上传组件,它可以帮助开发者实现用户友好的文件上传功能...

    jspSmartUpload上传下载全攻略 (解决中文问题和小于64K文件问题)

    在处理文件上传时,由于编码问题,中文文件名可能会出现乱码。jspSmartUpload提供了解决这个问题的方法: 1. 设置请求编码:在Servlet配置中,确保设置了正确的字符编码,例如`request.setCharacterEncoding("UTF-8...

    jspSmartUpload中文版

    `jspSmartUpload` 是一个专门针对JavaServer Pages(JSP)开发的文件上传组件,它在处理用户通过Web表单上传文件时提供了强大的支持。在这个特定的"jspSmartUpload中文版"中,主要关注的是对中文文件名的支持和乱码...

    JspSmartUpLoad支持中文jar包和源码

    在**使用说明.txt** 文件中,应该详细记录了如何配置和使用JspSmartUpload组件的步骤,包括引入jar包、配置web.xml、编写上传处理代码等。遵循这些说明,开发者能够快速上手,避免在实际应用中遇到问题。 在实际...

Global site tag (gtag.js) - Google Analytics