| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 672 人关注过本帖
标题:[求助]文件下载,文件名字长度自动被截取改变问题
只看楼主 加入收藏
可可℃乐
Rank: 2
等 级:新手上路
威 望:3
帖 子:1054
专家分:0
注 册:2006-5-9
收藏
 问题点数:0 回复次数:2 
[求助]文件下载,文件名字长度自动被截取改变问题

在文件下载的时候,文件名字长度超过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();
}

}


先谢谢大家了

搜索更多相关主题的帖子: 文件名字 import 长度 自动 
2007-10-18 18:31
可可℃乐
Rank: 2
等 级:新手上路
威 望:3
帖 子:1054
专家分:0
注 册:2006-5-9
收藏
得分:0 
连接图例:
图片附件: 游客没有浏览图片的权限,请 登录注册


打开图例:

图片附件: 游客没有浏览图片的权限,请 登录注册


谢谢。

[url=http://www.]网页设计教程[/url]
2007-10-18 18:38
glamey
Rank: 2
等 级:论坛游民
威 望:1
帖 子:57
专家分:17
注 册:2006-5-31
收藏
得分:0 
你上传的时候把文件在数据库中有保存把,是文件名字,还是文件的路径。
要是名字入库的时候,库中的字符串还跟入库之前一样吗?
我看你把文件名字转来转去的,真是麻烦,估计就是转的时候把数据给搞丢了。

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

锲而不舍。自信自强。
2007-10-22 18:24
快速回复:[求助]文件下载,文件名字长度自动被截取改变问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052954 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved