`
编程足球
  • 浏览: 257774 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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

阅读更多
用jspSmartUpload做文件上传下载,该组件默认是不是utf-8编码,对中文支持不好,当文件名或参数有中文时候就会出现乱码。在google一番后找到一种目前比较好的解决方案
修改源码(听说是侵权,但....)

找到源码,并且参考网上的讲法,进行修改,发现可以解决

1)当页面上传有参数时,中文会乱码,解决页面上中文参数乱码方法:
修改类SmartUpload()中的upload()方法
(可以按照关键字   application/x-macbinary  定位到)
    public void upload()
        throws SmartUploadException, IOException, ServletException
    {
        int totalRead = 0;
        int readBytes = 0;
        long totalFileSize = 0L;
        boolean found = false;
        String dataHeader = new String();
        String fieldName = new String();
        String fileName = new String();
        String fileExt = new String();
        String filePathName = new String();
        String contentType = new String();
        String contentDisp = new String();
        String typeMIME = new String();
        String subTypeMIME = new String();
        boolean isFile = false;
        m_totalBytes = m_request.getContentLength();
        m_binArray = new byte[m_totalBytes];
        for(; totalRead < m_totalBytes; totalRead += readBytes)
            try
            {
                m_request.getInputStream();
                readBytes = m_request.getInputStream().read(m_binArray, totalRead, m_totalBytes - totalRead);
            }
            catch(Exception e)
            {
                throw new SmartUploadException("Unable to upload.");
            }

        for(; !found && m_currentIndex < m_totalBytes; m_currentIndex++)
            if(m_binArray[m_currentIndex] == 13)
                found = true;
            else
                m_boundary = m_boundary + (char)m_binArray[m_currentIndex];

        if(m_currentIndex == 1)
            return;
        m_currentIndex++;
        do
        {
            if(m_currentIndex >= m_totalBytes)
                break;
            dataHeader = getDataHeader();
            m_currentIndex = m_currentIndex + 2;
            isFile = dataHeader.indexOf("filename") > 0;
            fieldName = getDataFieldValue(dataHeader, "name");
            if(isFile)
            {
                filePathName = getDataFieldValue(dataHeader, "filename");
                fileName = getFileName(filePathName);
                fileExt = getFileExt(fileName);
                contentType = getContentType(dataHeader);
                contentDisp = getContentDisp(dataHeader);
                typeMIME = getTypeMIME(contentType);
                subTypeMIME = getSubTypeMIME(contentType);
            }
            getDataSection();
            if(isFile && fileName.length() > 0)
            {
                if(m_deniedFilesList.contains(fileExt))
                    throw new SecurityException("The extension of the file is denied to be uploaded (1015).");
                if(!m_allowedFilesList.isEmpty() && !m_allowedFilesList.contains(fileExt))
                    throw new SecurityException("The extension of the file is not allowed to be uploaded (1010).");
                if(m_maxFileSize > (long)0 && (long)((m_endData - m_startData) + 1) > m_maxFileSize)
                    throw new SecurityException(String.valueOf((new StringBuffer("Size exceeded for this file : ")).append(fileName).append(" (1105).")));
                totalFileSize += (m_endData - m_startData) + 1;
                if(m_totalMaxFileSize > (long)0 && totalFileSize > m_totalMaxFileSize)
                    throw new SecurityException("Total File Size exceeded (1110).");
            }
            if(isFile)
            {
                com.jspsmart.upload.File newFile = new com.jspsmart.upload.File();
                
                newFile.setParent(this);
                newFile.setFieldName(fieldName);
                newFile.setFileName(fileName);
                newFile.setFileExt(fileExt);
                newFile.setFilePathName(filePathName);
                newFile.setIsMissing(filePathName.length() == 0);
                newFile.setContentType(contentType);
                newFile.setContentDisp(contentDisp);
                newFile.setTypeMIME(typeMIME);
                newFile.setSubTypeMIME(subTypeMIME);
                if(contentType.indexOf("application/x-macbinary") > 0)
                    m_startData = m_startData + 128;
                newFile.setSize((m_endData - m_startData) + 1);
                newFile.setStartData(m_startData);
                newFile.setEndData(m_endData);
                m_files.addFile(newFile);
            } else
            {

//    源码为:
//  String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1);

//             在原来的基础上定义字符编码utf-8            	
 String value = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, "UTF-8");
                m_formRequest.putParameter(fieldName, value);
            }
            if((char)m_binArray[m_currentIndex + 1] == '-')
                break;
            m_currentIndex = m_currentIndex + 2;
        } while(true);
    }



2) 当上传时文件名为中文时,解决中文乱码方法
修改类SmartUpload()中的getDataHeader()方法
    private String getDataHeader()
    {
        int start = m_currentIndex;
        int end = 0;
        int len = 0;
        boolean found = false;
        while(!found) 
            if(m_binArray[m_currentIndex] == 13 && m_binArray[m_currentIndex + 2] == 13)
            {
                found = true;
                end = m_currentIndex - 1;
                m_currentIndex = m_currentIndex + 2;
            } else
            {
                m_currentIndex++;
            }
        String dataHeader = null;
/**
* 	源码为:
*   dataHeader = new String(m_binArray, start, (end - start) + 1);
*/        
		try {
//			指定编码方式为utf-8
			dataHeader = new String(m_binArray, start, (end - start) + 1,"utf-8");
		} catch (UnsupportedEncodingException e) 
		{
			e.printStackTrace();
		}
        return dataHeader;
    }



目前上面的方法可以满足自己在项目中的需求,有兴趣的朋友可以自己下载自己看看源码,或者直接用我改好的先用用
分享到:
评论
3 楼 刘焕杰 2013-08-03  
楼主,为啥放进去后,我下载的中文文件名还是乱码呢?
2 楼 yxyysu 2012-05-21  
下载之后使用了,没有解决上传时中文名字乱码问题,请博主指导。
1 楼 liutang123 2012-04-10  

楼主,啥也不说了~~~
那啥不言谢``

相关推荐

    jspsmartupload-解决中文乱码

    最近实验室做了一个项目,使用jspsmartupload来实现的文件的上传下载,原来在windows平台运行的挺好,但是后来系统移植到linux平台上,结果在上传或下载的文件名中有中文时就会出现乱码。后来查了网上一些人的解决...

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

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

    jspsmartupload中文乱码解决版

    通过以上步骤,我们可以有效地解决`jspsmartupload`在处理中文文件名和内容时可能出现的乱码问题。同时,提供的`jspsmartcom_zh_CN_Peter.jar`和`jspsmartcom_zh_CN_Peter.rar`可能包含了`jspsmartupload`的中文版本...

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

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

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

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

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

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

    jspsmartupload支持UTF-8版本

    在你的项目中使用这个UTF-8支持的JSPSmartUpload后,你可以安全地处理包含中文或其他非英文字符的文件名,这在处理来自不同地区用户的上传请求时尤其重要。你提到的"参考代码"可能是对如何集成和使用这个组件的一个...

    jspSmartUpload中文版

    在这个特定的"jspSmartUpload中文版"中,主要关注的是对中文文件名的支持和乱码问题的解决。 在传统的Web开发中,尤其是涉及到多语言环境时,文件上传经常遇到的一个问题是中文文件名的乱码。这是因为不同的字符...

    jspsmartupload上传文件工程路径中文无乱码

    在这个Eclipse工程实例中,我们将探讨如何使用`jspsmartupload`来实现文件和图片的上传,同时确保文件保存路径中的中文字符不会出现乱码问题。 首先,`jspsmartupload`库解决了文件上传过程中的一些常见问题,如...

    jspSmartupload已解决中文问题

    `jspSmartupload` 已经解决了这个问题,确保在上传和下载过程中能正确处理中文文件名。 在JSP和Servlet中处理文件上传,首先需要理解HTTP协议的限制。HTTP协议本身并不支持多部分(multipart)请求,因此在上传文件...

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

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

    jspsmartupload及例子

    这款库支持多文件上传、大文件上传,并且能很好地处理中文文件名,避免了因编码问题导致的乱码现象。在本文中,我们将深入探讨JSpsmartUpload的工作原理、核心功能以及如何在实际项目中运用它。 ### 一、JSp...

    JspSmartUpLoad支持中文jar包和源码

    在处理中文文件名方面,`jspSmartUplodeCN.jar` 是针对中文文件名问题进行了优化的版本,确保在上传过程中可以正确处理包含中文字符的文件名,避免乱码或上传失败的问题。 **jar包** 是Java应用程序接口(Java ...

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

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

    JspSmartUpload自定义编码版

    **JspSmartUpload自定义编码版**是一款专为解决Java Web开发中文件上传时可能出现的中文乱码问题而设计的工具。在传统的JSP文件上传过程中,由于编码不一致,尤其是遇到非ASCII字符(如汉字)时,可能会导致乱码现象...

    jspsmartupload.rar

    【标题】"jspsmartupload.rar" 是一个包含解决JavaScript页面(JSP)上传文件时中文乱码问题的工具包。这个压缩文件的核心是 "jspsmartupload.jar",它是一个Java类库,专为处理在JSP环境中进行文件上传时可能出现的...

    (支持UTF-8)---- jspSmartUpload.jar

    这个库在处理多语种环境下的文件上传时,能确保文件名和元数据的正确编码,避免了因字符集问题导致的乱码问题。 首先,我们要理解UTF-8编码的重要性。UTF-8是一种广泛使用的Unicode字符编码,它能够表示几乎所有的...

Global site tag (gtag.js) - Google Analytics