注册 登录
编程论坛 J2EE论坛

[求助]文件下载,文件名字长度自动被截取改变问题

可可℃乐 发布于 2007-10-18 18:31, 682 次点击

在文件下载的时候,文件名字长度超过17个汉字的时候,便会自动被截取缩短,而且还加A,B之类的字符,名字被改变,下载连接的文件名字无改变,打开就被改变,希望GG,JJ帮忙看下,小弟不胜感激。
下面是下载的Servlet.
package sanheoa;

import javax.servlet.*;
import javax.servlet.http.*;
import sanhe.xdatabase.XDBEncodeConvert;
import java.io.*;
import com.jspsmart.upload.SmartUpload;

import sanhe.XException;

public class Download extends HttpServlet {

public SmartUpload sUpload=null;
public String sourceFilePathName="";

public String namecn="";

//Initialize global variables
public void init() throws ServletException {
sUpload= new SmartUpload();
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
sourceFilePathName=XDBEncodeConvert.toChinese(request.getParameter("source"));

namecn = XDBEncodeConvert.toChinese(request.getParameter("name"));
String aimFile = request.getSession().getServletContext().getRealPath(sourceFilePathName);
String email = XDBEncodeConvert.toChinese(request.getParameter("mail"));

if(email.equals("1")){
response.reset();
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename=\"" + toUtf8String(namecn) + "\"");//

try{
java.io.OutputStream os = response.getOutputStream();
java.io.FileInputStream fis = new java.io.FileInputStream(aimFile);
byte[] b = new byte[2048];
int i = 0;
while ((i = fis.read(b)) > 0){
os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();
}
catch (Exception e){
e.printStackTrace();
}
}else{
try {
sUpload.initialize(this.getServletConfig(),request, response);
sUpload.setContentDisposition(null);
}
catch (ServletException ex) {
XException.write("aaa");
}
try {
sUpload.downloadFile(sourceFilePathName);
}
catch (Exception e) {
XException.write("sanhe.cdatebase.download.backgroundDispose:" + e.toString());
}
}

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}

public void destroy() {
}


public static String toUtf8String(String s)
{
StringBuffer stringbuffer = new StringBuffer();
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
if(c >= 0 && c <= '\377')
{
stringbuffer.append(c);
} else
{
byte abyte0[];
try
{
abyte0 = String.valueOf(c).getBytes("utf-8");
}
catch(Exception exception)
{
abyte0 = new byte[0];
}
for(int j = 0; j < abyte0.length; j++)
{
int k = abyte0[j];
if(k < 0)
{
k += 256;
}
stringbuffer.append("%" + Integer.toHexString(k).toUpperCase());
}

}
}

return stringbuffer.toString();
}

}


先谢谢大家了

2 回复
#2
可可℃乐2007-10-18 18:38
连接图例:
只有本站会员才能查看附件,请 登录


打开图例:

只有本站会员才能查看附件,请 登录


谢谢。
#3
glamey2007-10-22 18:24
你上传的时候把文件在数据库中有保存把,是文件名字,还是文件的路径。
要是名字入库的时候,库中的字符串还跟入库之前一样吗?
我看你把文件名字转来转去的,真是麻烦,估计就是转的时候把数据给搞丢了。

下载的时候,为了防止盗链,把文件的直接目录隐藏起来也对,但是下载的时候怎么还写那么的代码呢。
1