Java文件流下載並提示文件不存在


做文件下載功能的時候,一般使用流的形式下載文件,

如果源文件不存在,下載頁面可能就會沒有提示,或者一片空白

用戶操作之后可能一頭霧水,那如何友好提示呢?

想到的有兩種

1.可以嘗試下載一個名稱為:文件不存在.txt 的文檔,里面還可以補充說明信息,保證每次能下載到文件,避免沒有響應到用戶的情況。

2.后台輸出一段JavaScript腳本提示文件不存在或已經被刪除。

直接上代碼

前端只有給出一個超鏈接即可

<a href="${pageContext.request.contextPath}/receipt/download?fileName=套路得人心.jpg">套路得人心.jpg</a>

后端控制器代碼

/**
     * 下載發票
     * @param request
     * @return
     */
    @RequestMapping(value = "/receipt/download",method = RequestMethod.GET)
    public void downloadReceipt(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
        // 獲得要下載的文件的名稱
        String fileName = request.getParameter("fileName");
        File file = new File(receiptPath + fileName);
        if(file.exists()){
            try {

                String userAgent = request.getHeader("User-Agent");
                if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
                    //IE瀏覽器處理
                    fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
                } else {
                    // 非IE瀏覽器的處理:
                    fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
                }

                // 以流的形式下載文件。
                InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
                byte[] buffer = new byte[inputStream.available()];
                inputStream.read(buffer);
                inputStream.close();
                // 清空response
                response.reset();
                // 設置response的Header
                response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName));
                response.addHeader("Content-Length", "" + file.length());
                OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
                response.setContentType("application/octet-stream");
                outputStream.write(buffer);
                outputStream.flush();
                outputStream.close();
            }catch (IOException ex) {
                log.error("下載文件出錯:" + ex);
            }
        }else{
            try {
                response.setContentType("text/html; charset=UTF-8"); //轉碼
                PrintWriter out = response.getWriter();
                out.flush();
                out.println("<script defer='defer' type='text/javascript'>");
                out.println("alert('文件不存在或已經被刪除!');");
                out.println("window.location='/AnnualStatistics/downloadList';");
                out.println("</script>");
            } catch (IOException e) {
                log.error("下載文件出錯:" + e);
            }
        }
    }

效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM