需要一段中文名字转换函数:
public String convertFileName(String src)
{
try {
byte[] b = src.getBytes();
char[] c = new char[b.length];
for (int i = 0; i < b.length; i++)
{
c[i] = (char) (b[i] & 0x00FF);
}
return new String( c );
}
catch (Exception e)
{
System.out.println(e.toString());
return src;
}
}
///////////////////////////////////////////////////////
//调用如下
String filename = convertFileName(request.getParameter( "filename" ));
public String convertFileName(String src)
{
try {
byte[] b = src.getBytes();
char[] c = new char[b.length];
for (int i = 0; i < b.length; i++)
{
c[i] = (char) (b[i] & 0x00FF);
}
return new String( c );
}
catch (Exception e)
{
System.out.println(e.toString());
return src;
}
}
///////////////////////////////////////////////////////
//调用如下
String filename = convertFileName(request.getParameter( "filename" ));
<%@page language="java" import="java.util.*,java.io.*;" contentType="text/html;charset=gb2312"%>
<jsp:useBean id="download_obj" class="publicbean.FileDownLoadBean" scope="request">
</jsp:useBean>
<%!
String downloadpath = "";
Vector list = new Vector();//获得下载文件的名字和相对路径,在list里面的第一个元素的值是文件的名字,第二个是文件的相对路径
public String convertFileName(String src)
{
try {
byte[] b = src.getBytes();
char[] c = new char[b.length];
for (int i = 0; i < b.length; i++)
{
c[i] = (char) (b[i] & 0x00FF);
}
return new String( c );
}
catch (Exception e)
{
System.out.println(e.toString());
return src;
}
}
%>
<%
list = download_obj.getFilePath(request.getParameter("fileid"));
downloadpath = (String)list.get(1);
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
String path=request.getRealPath("/");
response.setHeader("content-disposition","attachment;filename="+convertFileName((String)list.get(0)));
try{
bis=new BufferedInputStream(new FileInputStream(path+"\\"+downloadpath));
response.setContentType("text/html;charset=GB2312");
bos=new BufferedOutputStream(response.getOutputStream());
byte []bt=new byte[2048];
int n;
while((n=bis.read(bt,0,bt.length))!=-1){
bos.write(bt,0,n);
}
bis.close();
bos.close();
}
catch(IOException ex){
ex.printStackTrace();
}
%>
public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255) {
sb.append(c);
}
else {
byte[] b;
try {
b = Character.toString(c).getBytes("utf-8");
}
catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0)
k += 256;
sb.append("%" + Integer.toHexString(k).
toUpperCase());
}
}
}
return sb.toString();
}然后改写downloadFile,
toUtf8String(getFileName(sourceFilePathName)))));
append(toUtf8String(destFileName))));
加入这个方法过滤
----------------------------------------------------------------
原贴内容:
能说的详细一点吗 ?
谢谢是这样:
你首先要把得到的 jspSmartUpload 包里所有的 class 类反编译成 java 源代码,
然后放到诸如 jb 一类的工具里专门建立一个 jspSmartUpload 的 package,首先使得编译整个的 jspSmartUpload 包路径可以通过(可能需要先注释掉部分 java 代码,因为这些类互相嵌套编译,从依赖性最小的开始编译,知道全部通过)接下去,打开 SmartUpload 这个类,里面有4个 downloadFile 的方法,找到代码最长的那个。先把我给你的那个 toUtf8String 方法新增到这个 SmartUpload 类中,然后在 downloadFile 找到如下两处代码:
1、getFileName(sourceFilePathName)
2、append(destFileName)分别加入 toUtf8String 方法过滤成如下:
1、toUtf8String(getFileName(sourceFilePathName))
2、toUtf8String(destFileName))最后,重新编译该类,然后,将整个的 jspSmartUpload 重新打包成rar文件,放入tomcat 的 classpath,这样应该就可以使用了。谢谢