采用jspsmartupload上传文件时,如果文件名含有中文,在服务器端取得文件名是会出现乱码。如果表单项中填写了中文,一样会有乱码问题。看了下jspsmartupload的源码,改了两个地方,现在可以没有乱码问题了。
第一个地方,修改类SmartUpload中的upload()方法
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);
*/
/**
* 2009-9-17 修改 ,解决取得request的参数的中文编码问题
*/
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);
}
第二个地方,修改类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 = new String(m_binArray, start, (end - start) + 1);
/**
* 2008-9-17 解决文件名的中文乱码问题
*/
String dataHeader = null;
try {
dataHeader = new String(m_binArray, start, (end - start) + 1,"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return dataHeader;
}
如果不行的话,试着将编码改为项目页面中指定的编码格式
分享到:
相关推荐
最近实验室做了一个项目,使用jspsmartupload来实现的文件的上传下载,原来在windows平台运行的挺好,但是后来系统移植到linux平台上,结果在上传或下载的文件名中有中文时就会出现乱码。后来查了网上一些人的解决...
标题中的“jspSmartUpload上传中文文件名乱码问题”是一个常见的技术挑战,特别是在处理Web应用程序时,特别是那些涉及用户上传文件的场景。JSP Smart Upload是早期流行的一个用于Java Web应用的文件上传组件,它...
用几个简单的java语句操作java.io.BufferedInputStream和java.io.BufferedOutputStream,就能彻底解决jspSmartUpload乱码问题。... zip包中包含了jspsmartupload.jar和文件上传、下载示例代码,直接使用即可。
在这个Eclipse工程实例中,我们将探讨如何使用`jspsmartupload`来实现文件和图片的上传,同时确保文件保存路径中的中文字符不会出现乱码问题。 首先,`jspsmartupload`库解决了文件上传过程中的一些常见问题,如...
【JSPSmartUpload上传文件乱码解决纪实】 在Java Web开发中,使用第三方库如JSPSmartUpload处理文件上传时,可能会遇到中文文件名或参数值显示为乱码的问题。这个问题通常涉及到字符编码的处理,尤其是在不同操作...
同样,解决UploadBean上传文件乱码问题的方法也包括设置请求编码和服务器端处理。 对于UploadBean,解决乱码问题的具体步骤如下: 1. **JSP页面配置**:在JSP页面中,声明UploadBean实例,并设置编码方式,如`<jsp...
jsp SmartUpload 中文乱码问题解决是指在使用 jsp 的 SmartUpload 组件进行文件上传下载时,遇到中文乱码问题的解决方法。在这篇文章中,我们将介绍如何解决 jsp 中 SmartUpload 中文乱码问题。 一、上传 在使用 ...
`jspSmartUpload`组件是Java Web开发中广泛使用的文件上传工具,尤其在早期的Web应用中,它提供了方便的文件上传功能。这个组件允许用户在网页上选择一个或多个文件,然后通过HTTP POST请求将这些文件上传到服务器。...
真正解决jspSmartUpload组件上传下载文件时中文乱码问题。以前在网上也找过!!!下载了些,都没能解决中文乱码问题!自己改了源代码,并做成jar包,直接用就可以。 另,我把File()类 改成了 SmartFile()类。详情请...
下载即可运行,但是这个压缩包不支持中文名称的文件下载功能,我上传了一个可以下载中文的不会乱码的jspSmartUpload 组件,网址:http://download.csdn.net/detail/huahuahailang/4265620 照着使用,即可下载中文。
`jspsmartupload.jar` 是一个专为Java Web开发设计的上传组件,它解决了在处理文件上传时可能出现的中文乱码问题。这个组件是许多Web应用程序中的重要工具,特别是那些需要用户上传包含中文字符的文件名或元数据的...
`jspsmartupload`是一个专门用于Java Web应用程序的文件上传组件,它可以帮助开发者实现用户友好的文件上传功能。然而,在处理中文文件名或者中文内容时,由于编码不一致或处理不当,可能导致乱码。本篇将详细讨论...
修改过的jspsmartupload ,可以获取表单中的中文数据,不乱码,可以上传名字含有中文的文件。
`jspSmartUpload`是一个专为解决此类问题设计的组件,它能够有效地处理中文乱码,确保文件上传和下载过程中的文件名正确显示。 `jspSmartUpload`是一个基于Java的文件上传组件,它提供了强大的文件上传和管理功能,...
本文将深入探讨SmartUpload上传文件时如何解决中文乱码的问题。 首先,我们要理解乱码产生的原因。在计算机系统中,不同的文件系统和编程语言可能使用不同的字符编码标准,如ASCII、GBK、UTF-8等。如果在读取或写入...
JSpsmartUpload是一款基于Java的文件上传组件,它在Web开发中扮演着重要角色,特别是在处理用户通过表单提交的文件时。这款库支持多文件上传、大文件上传,并且能很好地处理中文文件名,避免了因编码问题导致的乱码...
总的来说,`jspSmartUpload中文版`是一个专注于解决中文文件名上传问题的实用工具,它提高了多语言环境下JSP应用的文件上传功能的稳定性和用户体验。它的成功在于对中文字符的深度处理以及广泛的兼容性测试,为...
以前遇到jspSmartUpload中文乱码问题,在CSDN上下载了jspSmartUpload的jar包却没解决,所以花了几个小时把问题解决了,已经测试没有问题。直接放入项目的lib目录下使用就可以。
解决jspsmartupload上传文件中文乱码 采用jspsmartupload上传文件时,如果文件名含有中文,在服务器端取得文件名是会出现乱码。如果表单项中填写了中文,一样会有乱码问题。看了下jspsmartupload的源码,改了两个...