溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

文件下載

發(fā)布時(shí)間:2020-07-04 16:34:36 來源:網(wǎng)絡(luò) 閱讀:494 作者:奔跑吧爽爽 欄目:開發(fā)技術(shù)

在創(chuàng)建一個(gè)文件夾,名稱download,先拷入要下載的一些文件
編寫下載的頁面,提供一些下載的超鏈接,點(diǎn)擊超鏈接,彈出下載的窗口
編寫下載的Servlet類,完成下載

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 先獲取到文件的名稱
    String filename = request.getParameter("filename");
    // 解決中文亂碼
    filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
    // System.out.println("要下載的文件名稱:"+filename);

            //設(shè)置兩個(gè)頭一個(gè)流
    // 設(shè)置第一個(gè)頭,值可以是MIME類型,可以獲取該文件的MIME類型
    String type = this.getServletContext().getMimeType(filename);
    response.setHeader("content-type",type);

    // 先獲取到用戶使用的瀏覽器的信息,根據(jù)瀏覽器的信息采用不同的編碼,例如火狐,采用Base64編碼,使用IE采用的URL編碼
    // 先判斷瀏覽器的信息
    String agent = request.getHeader("user-agent");
    // Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
    // System.out.println(agent);

    String name = null;
    if(agent.contains("Firefox")){
        // 使用是火狐,采用Base64編碼
        name = base64EncodeFileName(filename);
    }else{
        // 使用的是IE或者谷歌,使用URL編碼
        name = URLEncoder.encode(filename, "UTF-8");
    }
    System.out.println("編碼后的內(nèi)容:"+name);
    // 設(shè)置第二個(gè)頭
    response.setHeader("content-disposition", "attachment;filename="+name);

    // 一個(gè)流,先獲取到要下載的文件的輸入流,使用response對象的輸出流輸出到客戶端上,完成文件下載了
    // 先獲取到要下載的文件的輸入流,先獲取到download文件夾 + filename 文件,獲取文件的輸入流了
    String path = this.getServletContext().getRealPath("/download");
    // System.out.println(path);
    // 獲取文件的輸入流
    InputStream in = new FileInputStream(path+"/"+filename);
    // 獲取輸出流,不能new,使用response對象
    OutputStream os = response.getOutputStream();
    byte [] b = new byte[1024];
    int len = 0;
    while((len = in.read(b)) != -1){
        os.write(b, 0, len);
    }
    in.close();
    os.close();
}

/**
 * 傳入文件的名稱,進(jìn)行Base64編碼
 * @param fileName
 * @return
 */
public String base64EncodeFileName(String fileName) {
    BASE64Encoder base64Encoder = new BASE64Encoder();
    try {
        return "=?UTF-8?B?"
                + new String(base64Encoder.encode(fileName
                        .getBytes("UTF-8"))) + "?=";
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
}
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI