java后台Controller下载文件方法

   

/**
     * 导出
     * @param request
     * @param response
     */
    @RequestMapping(value="exportInfo")
    public void exportInfo(HttpServletRequest request,HttpServletResponse response ){
        try {
            String[] fi_ids={"0001","0002"};

            //根据业务查询需要下载的信息
            List<Map<String, Object>> selectExportInfo = backgroundService.selectExportInfo(fi_ids);
            String file_name=System.currentTimeMillis()+"";
            String fileDir="E:"+File.separator+"upload"+File.separator+file_name+".xls";
            String sheetName="信息";
            //String[] titleRow={"企业名称","核心联系人","状态","类别"};
            String[] title={"name","cc_name","state","fi_tpye"};
            ExcelUtils2.createExcel_OneSheet(fileDir, sheetName, title);
            ExcelUtils2.writeToExcel_OneSheet(fileDir, sheetName, selectExportInfo, title);
            
            String fileName=fileDir.substring(fileDir.lastIndexOf("/")+1);
            byte[] buffer=null;  
            buffer = ExcelUtils.downFileByte(fileDir) ; 
            String fileSuffixName=   fileName.substring(fileName.lastIndexOf(".")+1);
            response.reset(); //清除缓存
            response.setContentType("application/" +fileSuffixName + ";" +"charset = UTF-8"); //设置字符集和文件后缀名
            String name="导出信息";
            name = new String(name.getBytes(), "ISO-8859-1");
            response.setHeader("Content-Disposition","attachment; filename=" +name+"."+fileSuffixName); // 设置文件名称
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());  
            toClient.write(buffer);  
            toClient.flush();  
            toClient.close();
        } catch (Exception e) {
            e.printStackTrace();
            Log4jUtil.getLog4jUtil().error("导出信息异常"+e.getMessage());
        }
    }

/**
     * 创建一个新excel.  一个sheet
     * 
     * @param fileDir
     *            excel的路径
     * @param sheetName
     *            要创建的表格索引
     * @param titleRow
     *            excel的第一行即表格头
     */
    public static void createExcel_OneSheet(String fileDir, String sheetName, String titleRow[]) throws Exception {
        // 创建workbook
        workbook = new HSSFWorkbook();
        // 添加Worksheet(不添加sheet时生成的xls文件打开时会报错)
        HSSFSheet sheet1 = workbook.createSheet(sheetName);
        // 新建文件
        FileOutputStream out = null;
        try {
            // 添加表头
            HSSFRow row = workbook.getSheet(sheetName).createRow(0); // 创建第一行
            for (short i = 0; i < titleRow.length; i++) {
                HSSFCell cell = row.createCell(i);
                cell.setCellValue(titleRow[i]);
            }
            out = new FileOutputStream(fileDir);
            workbook.write(out);
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }



/**
     * 往excel中写入(已存在的数据无法写入).
     * 
     * @param fileDir
     *            文件路径
     * @param sheetName 
     *            表格索引
     * @param mapList 
     *            需要写入的数据
     * @param titleRow[]
     *            excel的第一行即表格头
     * @throws Exception
     */
    public static void writeToExcel_OneSheet(String fileDir, String  sheetName, List<Map<String, Object>> mapList,String titleRow[]) throws Exception {
        OutputStream out = null;
        // 创建workbook
        File file = new File(fileDir);
        Workbook workBook = getWorkbok(file);
        Sheet sheet = workBook.getSheet(sheetName);
        // 删除原有数据,除了属性列
        int rowNumber = sheet.getLastRowNum(); // 第一行从0开始算
        Row row0 = sheet.getRow(0);
        for (int i = 1; i <= rowNumber; i++) {
            Row row = sheet.getRow(i);
            sheet.removeRow(row);
        }
        // 往Excel中写新数据
        for (int j = 0; j < mapList.size(); j++) {
            // 创建一行:从第二行开始,跳过属性列
            Row row = sheet.createRow(j + 1);
            Map<String, Object> dataMap = mapList.get(j);
            System.out.println(dataMap);
            int count = row0.getLastCellNum(); 
            for (int k = 0; k <count; k++) {
                for (int i = 0; i < titleRow.length; i++) {
                    Cell cell = row.createCell(k);
                    if (dataMap.get(titleRow[k])!=null) {
                        cell.setCellValue(dataMap.get(titleRow[k]).toString());
                    }
                }
            }
        }
        // 创建文件输出流,准备输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效
        out = new FileOutputStream(fileDir);
        workBook.write(out);
    }

/** 
     * 下载文件 
     * 返回byte[] 
     * @param fileName 需要下载的文件名 
     * @return 
     * @throws Exception 
     */  
    public static byte[] downFileByte(String downLoadPath) throws Exception{  
        byte[] return_arraybyte=null;  
        InputStream ins=new FileInputStream(downLoadPath );  
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();  
        byte[] buf = new byte[1024];  
        int bufsize = 0;  
        while ((bufsize = ins.read(buf, 0, buf.length)) != -1) {  
            byteOut.write(buf, 0, bufsize);  
        }  
        return_arraybyte = byteOut.toByteArray();  
        byteOut.close();  
        ins.close();  
    return return_arraybyte;  
    }



   /**
     *  根据业务查询需要下载的信息
     * @param fi_ids
     * @return
     * @throws Exception
     */

    @Override
    public List<Map<String, Object>> selectExportInfo(String[] fi_ids) throws Exception {
        String join = StringUtils.join(fi_ids, ",");
        List<Map<String, Object>> queryForList = jdbcTemplate.queryForList(" SELECT f.name,c.cc_name,f.state,f.fi_tpye from tb_firm_info  f LEFT JOIN tb_industry_commerce i on f.fi_id=i.fi_id LEFT JOIN (SELECT * from tb_core_contacts GROUP BY fi_id) c on f.fi_id=c.fi_id where FIND_IN_SET(f.fi_id,'"+join+"') ");
           return queryForList;
    }

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Java后台接收多个文件,可以通过以下步骤: 1. 创建一个表单,其中包含多个文件上传字段。 2. 在后台编写一个处理文件上传请求的Servlet或Controller。 3. 在Servlet或Controller中获取上传的文件,可以使用Apache Commons FileUpload库来简化这个过程。 4. 对于每个上传的文件,可以使用FileOutputStream将其保存到服务器文件系统中。 以下是一个简单的示例代码,可以用于演示如何在Java后台接收多个文件: ``` @WebServlet("/fileUpload") @MultipartConfig public class FileUploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取所有上传的文件 List<Part> fileParts = request.getParts().stream().filter(part -> "file".equals(part.getName())).collect(Collectors.toList()); // 遍历每个上传的文件,并保存到服务器文件系统中 for (Part filePart : fileParts) { String fileName = filePart.getSubmittedFileName(); InputStream fileContent = filePart.getInputStream(); Files.copy(fileContent, new File("/path/to/upload/dir/" + fileName).toPath()); } // 返回上传成功的响应 response.getWriter().println("File(s) uploaded successfully!"); } } ``` 在上面的代码中,我们使用了@MultipartConfig注解来启用文件上传功能,然后使用request.getParts()方法获取所有上传的文件。我们过滤出所有名为"file"的Part对象,并使用Files.copy()方法文件保存到服务器文件系统中。最后,我们向客户端发送一个简单的成功响应。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10000guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值