之前做过下载文件的后台方法

/**
     * 下载附件
     */
    public void fjxxDown() throws IOException {
        String fjxxno = getPara("fjxxno");
        Record fjxx = LkglService.service.fjxxDown(fjxxno);
        byte[] fjnr = fjxx.get("fjnr");
        
        new ToolFileConsole().loadFileForByte(getResponse(),        //该类 附在文末尾
                String.valueOf(fjxx.get("fjmc")), "application/x-msdownload", fjnr);
    }

这里附件是从查出数据库的文件。

现在改 需求:需要下载一个本地文件(模仿上文)

后台代码;


private static String DOWNLOADPATH = "/files/aq/hj/jshjmb/jsmb.xlsx";  ()


/**
* 下载附件 */ public void download() throws IOException { String realPath = super.getRealPath(); String downloadPath = realPath + DOWNLOADPATH; File file = new File(downloadPath); System.out.println(file.exists()); FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] b = new byte[1024]; //不能直接把这个数组放入最后一个参数,不然文件打不开 int len; while ((len = fis.read(b)) != -1) { bos.write(b, 0, len); } fis.close(); bos.close(); byte[] buffer = bos.toByteArray(); new ToolFileConsole().loadFileForByte(getResponse(), String.valueOf("家属会见信息模板文件.xlsx"), "application/x-msdownload", buffer); //String.valueOf("家属会见信息模板文件.xlsx")似乎没发挥用处
      renderNull(); }

注意:

new ToolFileConsole().loadFileForByte方法最后一个参数是 byte数组

我们采取
 ByteArrayOutputStream bos 读出文件。
然后再 byte[] buffer = bos.toByteArray();  转为byte数组格式。放入最后一个参数位置。