• 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;
        }
  • 相关阅读:
    51 Nod 1013 3的幂的和 矩阵链乘法||逆元+快速幂
    poj3580 序列之王 fhqtreap
    bzoj1503: [NOI2004]郁闷的出纳员 fhqtreap版
    bzoj1251: 序列终结者 fhqtreap写法
    bzoj4864: [BeiJing 2017 Wc]神秘物质
    bzoj3786 星际探索 splay dfs序
    bzoj1861 书架 splay版
    bzoj1503 郁闷的出纳员 splay版
    网络转载:局域网安全:解决ARP攻击的方法和原理
    黑客的故事
  • 原文地址:https://www.cnblogs.com/flyShare/p/12498096.html
Copyright © 2020-2023  润新知