首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

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

2013-04-20 
jspSmartUpload组件上传下载文件时中文乱码问题(转)??? 这次用jspSmartUpload做文件上传下载,该组件默认是

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;    }

?

?

?

热点排行