zoukankan      html  css  js  c++  java
  • java 单文件下载

    一、前端代码

      //判断选中状态
            var ids ="";
            var num = 0;
    
            $(".checkbox").each(function () {
                if($(this).is(':checked')){
                    ids +=$(this).val() + ",";
                    num++;
                }
            });
            if(num <=0 ){
                toastr.error('请选择需要下载的文件!');
                return;
            }
            if(num > 1){
                toastr.error('页面下载只支持单个文件下载!');
                return;
            }
            ids = ids.slice(0,ids.length-1);
            // 拼接前端的form表单
            var tempForm = $('<form style="display:none;" id="tempFor" method="post" target="_blank" action="'+backbasePath+'/apia/v1/file/downloadFileById">' +
                '<input type="hidden" id="id" name="id" value="'+ids+'"/>' +
                '<input type="hidden" id="token" name="token" value="'+$("#token").val()+'"/></form>');
            // 将拼接的form表单加在body里面
            $('body').append(tempForm);
            //表单提交,调用后端的控制器
            tempForm.submit();
            //表单删除
            tempForm.remove();

    二、控制器代码

       /**
         * 单文件下载
         */
        @RequestMapping(path = "/downloadFileById")
        public void downloadFileById(HttpServletRequest req, HttpServletResponse res) throws Exception {
            // 下载文件的集合
            Map<String, Object> downloadFile=knowledgeService.downloadFileById(req);
            if(downloadFile!=null && downloadFile.size()>0)
            {
           // 文件保存地址 String path
    =downloadFile.get("file_path").toString();
           // 文件名称 String fileName
    =downloadFile.get("file_real_name").toString();
           // 文件大小 String fileSize
    =downloadFile.get("file_size").toString(); this.download(fileName,path,fileSize, res); } }

        // 具体文件下载的方法
        public HttpServletResponse download(String fileName,String path,String fileSize,HttpServletResponse response) {
            //读取文件上传路径
            String orgPath = "";
            orgPath = filePath+path;
                try {
                // 以流的形式下载文件
                InputStream fis = new BufferedInputStream(new FileInputStream(orgPath));
                // 定义字节数组用来当作缓冲区
                byte[] buffer = new byte[fis.available()];
                // 将文件以字节流形式读入缓冲区字节数组
                fis.read(buffer);
                // 关闭写入流
                fis.close();
                // 清空response
                response.reset();
                // 设置response的Header
                response.addHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(fileName,"UTF-8"));
                response.addHeader("Content-Length", "" +fileSize);
                response.setCharacterEncoding("UTF-8");
                OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
                response.setContentType("application/octet-stream");
                toClient.write(buffer);
                toClient.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            return response;
        }
  • 相关阅读:
    红帽7 Shell编程
    红帽7 vim编辑器
    红帽7 管道符、重定向与环境变量
    红帽7 systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令
    python 装饰器详解
    红帽7 常用系统命令
    转 JSON详解
    转 C# using 三种使用方式
    存储过程详解 转
    使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件(转)
  • 原文地址:https://www.cnblogs.com/flyShare/p/12498096.html
Copyright © 2011-2022 走看看