之前做过下载文件的后台方法
/** * 下载附件 */ 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数组格式。放入最后一个参数位置。