博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java web实现文件下载的注意事项
阅读量:5102 次
发布时间:2019-06-13

本文共 3164 字,大约阅读时间需要 10 分钟。

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

注意点:

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

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

html:

 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
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();            }        }    }}

 

转载于:https://www.cnblogs.com/xumz/p/9630589.html

你可能感兴趣的文章
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
开始Flask项目
查看>>
Ruby:多线程队列(Queue)下载博客文章到本地
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>
webView添加头视图
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
php_扑克类
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
linux基础命令-chgrp/chown/chomd
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>