jsp文件下載

<%@page import="com.ebring.core.util.JawaGlobals"%><%@page import="com.ebring.core.util.JawaConstants"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page language="java" import="java.io.*,java.net.*"%><%
    //關於文件下載時採用文件流輸出的方式處理:  
    //加上response.reset(),並且所有的%>後面不要換行,包括最後一個;  
    response.reset();//可以加也可以不加  
    //application.getRealPath("/main/mvplayer/CapSetup.msi");獲取的物理路徑  
    //想辦法找到要提供下載的文件的物理路徑+文件名
    String filenamedownload =  "/resources/mobile/recon/";
    
    String logfile = request.getParameter("logfile");

    File logDir = new File(JawaGlobals.getHomeDirectory(), "logs");
    
    //顯示給用戶的下載文件名
    java.io.OutputStream outp = null;
    java.io.FileInputStream in = null;
    try {
        outp = response.getOutputStream();
        in = new FileInputStream(new File(logDir,logfile));
        response.setContentType("application/x-download");
        response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(logfile, "UTF-8"));
        byte[] b = new byte[1024];
        int i = 0;
        while ((i = in.read(b)) > 0) {
            outp.write(b, 0, i);
        }
        outp.flush();
        <!--由於jsp container在處理完成請求後會調用releasePageContet方法釋放所用的PageContext object,
        並且同時調用getWriter方法,由於getWriter方法與在jsp頁面中使用流相關的getOutputStream方法衝突,
        所以會造成這種異常,解決辦法是:只需要在jsp頁面的最後加上兩條語句:  out.clear();out=pageContext.pushBody();
        即可(其中out,pageContext均爲jsp內置對象!)-->
        //以下兩行可以解決首行出現換行而出現的流關閉異常錯誤
        out.clear();
        out = pageContext.pushBody();
    } catch (Exception e) {
        System.out.println("Error!");
        response.setCharacterEncoding("UTF-8");
        out.write("<div class='alert alert-error'>文件不存在!</div>");
        e.printStackTrace();
    } finally {
        if (in != null) {
            in.close();
            in = null;
        }
    }
%>

發佈了21 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章