`
feng5588feng
  • 浏览: 11859 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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();}

%>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics