jsp、java下载附件

 1 传入此jsp中的参数均已URLDencoder过。

 2 

 3 <%@page import="java.net.URLEncoder"%>

 4 <%@page import="java.io.BufferedOutputStream"%>

 5 <%@ page contentType="text/html;charset=utf-8"  pageEncoding="utf-8"%>

 6 <%

 7     boolean isError = false;

 8     String errorMsg = "";

 9     response.reset();//可以加也可以不加

10     request.setCharacterEncoding("UTF-8");

11     String folder = "news";

12     if(request.getParameter("folder")!=null){

13         folder = "upload/"+(String)request.getParameter("folder");

14     }

15     String newname = request.getParameter("newname");

16     // 是否允许直接在浏览器内打开 

17        boolean isInline = false ; 

18         out.clear();

19         response.reset();

20         String filePath = request.getRealPath("/"+folder)+"/" +newname;

21         java.io.BufferedOutputStream output = null ;

22         java.io.BufferedInputStream input = null ;    

23     try {

24         java.io.File f  = new  java.io.File(filePath);

25         if(f.exists() && f.canRead()){

26             String mimetype = null;

27             mimetype = application.getMimeType( filePath );

28             if(mimetype==null){

29                 mimetype = "application/octet-stream;charset=utf-8";

30             }

31             response.setContentType(mimetype);

32              // IE 的话就只能用 IE 才认识的头才能下载 HTML 文件, 否则 IE 必定要打开此文件! 

33             String ua = request.getHeader("User-Agent"); //获取终端类型

34             if(ua==null ){ua = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;)";}

35             boolean isIE = ua.toLowerCase().indexOf("msie")!=- 1; //是否为 IE

36             if (isIE && !isInline) {

37                 mimetype = "application/x-msdownload";

38             }

39             response.setContentType(mimetype);

40               // 是否内联附件 

41             String inlineType = isInline?"inline":"attachment";

42                response.setHeader("Content-Disposition" , inlineType + ";filename=" + filename);

43               // 设置下载内容大小

44             response.setContentLength((int)f.length());

45             // 缓冲区 

46             byte[] buffer = new byte[ 4096 ];

47                 output = new java.io.BufferedOutputStream(response.getOutputStream());

48                 input = new java.io.BufferedInputStream(new java.io.FileInputStream(f));

49                 int n = (-1);

50                 while((n=input.read(buffer,0,4096))>-1){

51                     output.write(buffer,0,n);

52                 }

53                 response.flushBuffer();

54                 

55         }else{

56             isError = true;

57             errorMsg = "文件不存在!";

58         }

59        } catch(Exception ex) {

60         isError = true;

61         errorMsg = "您下载的文件出现异常!";

62        } finally {

63         if(isError){

64             String path = request.getHeader("Referer");

65             errorMsg=new String(errorMsg.getBytes("GBK"), "ISO8859_1");

66 %>

67             <script type="text/javascript">

68                 alert('<%=errorMsg%>');

69                 window.location.href='<%=request.getHeader("Referer")%>';

70             </script>

71 <%    

72         }

73             if(input!=null ){input.close();}

74             if(output!=null ){output.close();}

75             out.clear();

76             out = pageContext.pushBody();    

77     }  

78 %>

你可能感兴趣的:(java)