用jAVA做的web工程中文档下载是怎么实现的

例如我已有一些文档在tomcat的temp路径下有个叫新建文档.doc的文件。怎样实现它的下载,我之前用路径拼的,结果一般的服务器都不支持中文路径。我设过tomcat中s... 例如我已有一些文档在tomcat的temp路径下有个叫新建文档.doc的文件。怎样实现它的下载,我之前用路径拼的,结果一般的服务器都不支持中文路径。我设过tomcat中server.xml中的<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" URIEncoding="GBK"/>也不好使。并且就算英文文件的话,只有doc,zip等格式的文件一点击是下载,.rar,txt,sql等文件一点击的话不是直接把内容在页面上显示了,就是显示一堆乱码。看很多网站上都有附件,rar包的下载,都是怎样实现的,请有实际开发经验的帮帮给指导一下
展开
 我来答
kevinzhang83
推荐于2016-04-16 · 超过19用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:35.7万
展开全部
public static void downloadFile( String filePath, HttpServletResponse response) {

String fileName = ""; //文件名,输出到用户的下载对话框
//从文件完整路径中提取文件名,并进行编码转换,防止不能正确显示中文名
try {
if(filePath.lastIndexOf("/") > 0) {
fileName = new String(filePath.substring(filePath.lastIndexOf("/")+1, filePath.length()).getBytes("GB2312"), "ISO8859_1");
}else if(filePath.lastIndexOf("\\") > 0) {
fileName = new String(filePath.substring(filePath.lastIndexOf("\\")+1, filePath.length()).getBytes("GB2312"), "ISO8859_1");
}

}catch(Exception e) {}
//打开指定文件的流信息
FileInputStream fs = null;
try {
fs = new FileInputStream(new File(filePath));
}catch(FileNotFoundException e) {
e.printStackTrace();
return;
}
//设置响应头和保存文件名
response.reset();
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
//写出流信息
int b = 0;
try {
PrintWriter out = response.getWriter();
while((b=fs.read())!=-1) {
out.write(b);
}
fs.close();
out.close();
System.out.println("文件下载完毕.");
}catch(Exception e) {
e.printStackTrace();
System.out.println("下载文件失败!");
}
}

我随便找了个都能用,中文路径没有问题。 fileName = new String(filePath.substring(filePath.lastIndexOf("/")+1, filePath.length()).getBytes("GB2312"), "ISO8859_1"); 这个地方转码了。
追问
大侠 我之前的是	private OutputRenderer doGotoUrlAction() {
String contextPath=getRequest().getContextPath();
FileSystem file=(FileSystem) FileSystemHome.getOnly().findById(id);
return new RedirectRenderer(contextPath+"/"+"tempfile/filesystem/"+file.getFile_id()+"/"+file.getFs_files_name());这种类型的,第二个参数该填啥啊?
追答
RedirectRenderer & OutputRenderer  这个是你工程里自己包装的吧?  这个我真猜不出, 看你的代码就是从文件系统李找到一个文件ID对应的文件。  contextPath+"/"+"tempfile/filesystem/"+file.getFile_id()+"/"+file.getFs_files_name()   这一段已经是算文件路径了, 
new RedirectRenderer(contextPath+"/"+"tempfile/filesystem/"+file.getFile_id()+"/"+file.getFs_files_name()); 使用构造方法产生了OutputRenderer, 接下来就只能看OutputRenderer 这里面提供什么方法了。
如果你的类里有方法返回 PrintWriter out 或者直接提供下载封装,我就不知道了,
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式