采用jspsmartupload上传文件时,如果文件名含有中文,在服务器端取得文件名是会出现乱码。如果表单项中填写了中文,一样会有乱码问题。看了下jspsmartupload的源码,改了两个地方,现在可以没有乱码问题了。 
  第一个地方,修改类SmartUpload中的upload()方法 
 
Java代码    ​​​​

​​​

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()方法

Java代码

​​​​​​

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;

}


如果不行的话,试着将编码改为项目页面中指定的编码格式