zoukankan      html  css  js  c++  java
  • java web实现文件下载的注意事项

    如图,在浏览器中实现以下的下载方式

    注意点:

    1,下载文件存在于web服务器上本地上;

    2,前端页面用form形式请求。

    html:

    <div id="download_debit_dlg" >
        <form id="itemForm_payreslut_charge" method="post">
            <table cellspacing="5px;">
                <tr>
                    <td><label for="debitDate">日期:</label></td>
                    <td><input type="date" name="debitDate" id="debitDate"
                        required="required"></td>
                </tr>
            </table>
        </form>
    </div>
    <div id="dlg-buttons">
        <a href="javascript:downloadDebitPost()"iconCls="icon-ok">下载</a> 
    </div>

     js:

    /**
     * 
     * 开始下载
     * ctx 对应路径
     */
    function downloadDebitPost(){
        var debitDate=$('#debitDate').val();
        if (debitDate==""||debitDate==null) {
            $.messager.alert("系统提示", "请完整输入日期");
            return;
        }
        $("#itemForm_payreslut_charge").attr("action", ctx + '/downloadDebit');
        $('#itemForm_payreslut_charge').submit();
    }

     java:

    @RequestMapping("/downloadDebit")
    public void downloadDebit(HttpServletRequest request,HttpServletResponse response,@RequestParam Map<String, Object> reqParams) {
        String debitDate = (String) reqParams.get("debitDate");
        debitDate=debitDate.replaceAll("-", "");
        try {
            String fileName = "202210000000000001214_" + debitDate + ".txt";//文件名
            String path = "D:/file/opbill/" + fileName;//绝对路径
            FileUploadUtil.downLoadByFilePath(request, response,path);
        } catch (BusinessException e) {
            //LOGGER.error("导出账单出错:", e);
        } catch (IOException e) {
            //LOGGER.error("导出账单出错:", e);
            e.printStackTrace();
        }
    }
    public class FileUploadUtil {    
        /**
         * 按文件源路径下载文件
         * @param request
         * @param response
         * @param path
         */
        public static void downLoadByFilePath(HttpServletRequest request,
                HttpServletResponse response, String path) {
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            try {
                response.setContentType("text/html;charset=utf-8");
                request.setCharacterEncoding("UTF-8");
                File file = new File(path);
                if(!file.exists()){
                    log.info("文件路径:"+path);
                    throw new BusinessException("下载文件路径不存在["+path+"]");
                }
                long fileLength = file.length();
                // 编码处理
                String fileName = path.substring(path.lastIndexOf("/") + 1);
                fileName = encodeFileName(request, fileName);
                response.setContentType("application/x-msdownload;");
    
                response.setHeader("Content-disposition", "attachment; filename="
                        + fileName);
                response.setHeader("Content-Length", String.valueOf(fileLength));
    
                bis = new BufferedInputStream(new FileInputStream(path));
                bos = new BufferedOutputStream(response.getOutputStream());
                byte[] buff = new byte[2048];
                int bytesRead;
                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                    bos.write(buff, 0, bytesRead);
                }
            } catch (IOException e) {
                // 此异常为下载中出现的异常,不影响下载功能,可捕获但无需抛出
            } catch (Exception e) {
                log.error("下载出现异常:", e);
            } finally {
                try {
                    if (bis != null) {
                        bis.close();
                    }
                    if (bos != null) {
                        bos.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
    
                }
            }
        }
    }
  • 相关阅读:
    比赛排名机制
    Python 异常(Exception)
    Python 异常(Exception)
    Sobel算子及C++实现
    一题多解(一) —— list(Python)判空(以及 is 与 == 的区别)
    常用软件的常用快捷键
    常用软件的常用快捷键
    从队列、二叉树到优先队列
    Jenkins(二)
    AssertValid函数学习
  • 原文地址:https://www.cnblogs.com/xumz/p/9630589.html
Copyright © 2011-2022 走看看