jsp、java下载附件

传入此jsp中的参数均已URLDencoder过。<%@page import="java.net.URLEncoder"%>
<%@page import="java.io.BufferedOutputStream"%>
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
<%
boolean isError = false;
String errorMsg = "";
response.reset();//可以加也可以不加
request.setCharacterEncoding("UTF-8");
String folder = "news";
if(request.getParameter("folder")!=null){
folder = "upload/"+(String)request.getParameter("folder");
}
String newname = request.getParameter("newname");
// 是否允许直接在浏览器内打开
boolean isInline = false ;
out.clear();
response.reset();
String filePath = request.getRealPath("/"+folder)+"/" +newname;
java.io.BufferedOutputStream output = null ;
java.io.BufferedInputStream input = null ;
try {
java.io.File f = new java.io.File(filePath);
if(f.exists() && f.canRead()){
String mimetype = null;
mimetype = application.getMimeType( filePath );
if(mimetype==null){
mimetype = "application/octet-stream;charset=utf-8";
}
response.setContentType(mimetype);
// IE 的话就只能用 IE 才认识的头才能下载 HTML 文件, 否则 IE 必定要打开此文件!
String ua = request.getHeader("User-Agent"); //获取终端类型
if(ua==null ){ua = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;)";}
boolean isIE = ua.toLowerCase().indexOf("msie")!=- 1; //是否为 IE
if (isIE && !isInline) {
mimetype = "application/x-msdownload";
}
response.setContentType(mimetype);
// 是否内联附件
String inlineType = isInline?"inline":"attachment";
response.setHeader("Content-Disposition" , inlineType + ";filename=" + filename);
// 设置下载内容大小
response.setContentLength((int)f.length());
// 缓冲区
byte[] buffer = new byte[ 4096 ];
output = new java.io.BufferedOutputStream(response.getOutputStream());
input = new java.io.BufferedInputStream(new java.io.FileInputStream(f));
int n = (-1);
while((n=input.read(buffer,0,4096))>-1){
output.write(buffer,0,n);
}
response.flushBuffer();

}else{
isError = true;
errorMsg = "文件不存在!";
}
} catch(Exception ex) {
isError = true;
errorMsg = "您下载的文件出现异常!";
} finally {
if(isError){
String path = request.getHeader("Referer");
errorMsg=new String(errorMsg.getBytes("GBK"), "ISO8859_1");
%>
<script type="text/javascript">
alert('<%=errorMsg%>');
window.location.href='<%=request.getHeader("Referer")%>';
</script>
<%
}
if(input!=null ){input.close();}
if(output!=null ){output.close();}
}
%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值