java下载Excel模板(工具类)

    一次文件下载记录

  一次不成熟的文件下载操做记录,但愿能对须要的人有所帮助。前端

1.前端代码

$("#downloadModel").click(function(){   var modelName = "设备信息导入模板.xls";   window.location.href = commenUrl +"/importAndExport/downloadModel?modelName="+modelName; });

2.控制层接收

1 @RequestMapping(value = "/downloadModel", method = RequestMethod.GET) 2 public void downloadModel(HttpServletRequest request,HttpServletResponse response,String modelName) { 3     try { 4  importAndExportService.downloadModel(modelName,request,response); 5     } catch (Exception e) { 6  e.printStackTrace(); 7  } 8 }

3.实现下载功能

  @SuppressWarnings("resource") @Override public void downloadBindModel(String modelName, HttpServletRequest request, HttpServletResponse response) throws Exception { //获取模板存放的路径
        String path=request.getSession().getServletContext().getRealPath("/")+"/excelTemplate/"; InputStream is=new FileInputStream(new File(path + modelName)); HSSFWorkbook hssfWorkbook=new HSSFWorkbook(is); //下载
        DownloadUtil dUtil=new DownloadUtil(); ByteArrayOutputStream os=new ByteArrayOutputStream(); hssfWorkbook.write(os); dUtil.download(os, response, modelName); os.flush(); os.close(); is.close(); }

4.工具类代码

public class DownloadUtil{ /** * @param filePath 要下载的文件路径 * @param returnName 返回的文件名 * @param response HttpServletResponse * @param delFlag 是否删除文件 */
  protected void download(String filePath, String returnName, HttpServletResponse response, boolean delFlag){ this.prototypeDownload(new File(filePath), returnName, response, delFlag); } /** * @param file 要下载的文件 * @param returnName 返回的文件名 * @param response HttpServletResponse * @param delFlag 是否删除文件 */
  protected void download(File file,String returnName,HttpServletResponse response,boolean delFlag){ this.prototypeDownload(file, returnName, response, delFlag); } /** * @param file 要下载的文件 * @param returnName 返回的文件名 * @param response HttpServletResponse * @param delFlag 是否删除文件 */
  public void prototypeDownload(File file,String returnName,HttpServletResponse response,boolean delFlag){ // 下载文件
    FileInputStream inputStream = null; ServletOutputStream outputStream = null; try { if(!file.exists()) {return;} response.reset(); //设置响应类型 PDF文件为"application/pdf",WORD文件为:"application/msword", EXCEL文件为:"application/vnd.ms-excel"。
      response.setContentType("application/octet-stream;charset=utf-8"); //设置响应的文件名称,并转换成中文编码 //returnName = URLEncoder.encode(returnName,"UTF-8");
      returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1"));    //保存的文件名,必须和页面编码一致,不然乱码 //attachment做为附件下载;inline客户端机器有安装匹配程序,则直接打开;注意改变配置,清除缓存,不然可能不能看到效果
      response.addHeader("Content-Disposition",   "attachment;filename="+returnName); //将文件读入响应流
      inputStream = new FileInputStream(file); outputStream = response.getOutputStream(); int length = 1024; int readLength=0; byte buf[] = new byte[1024]; readLength = inputStream.read(buf, 0, length); while (readLength != -1) { outputStream.write(buf, 0, readLength); readLength = inputStream.read(buf, 0, length); } } catch (Exception e) { e.printStackTrace(); } finally { try { outputStream.flush(); } catch (IOException e) { e.printStackTrace(); } try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } //删除原文件
      if(delFlag) { file.delete(); } } } /** * @param byteArrayOutputStream 将文件内容写入ByteArrayOutputStream * @param response 写入response * @param returnName 返回的文件名 * @throws IOException */
  public void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException { response.setContentType("application/octet-stream;charset=utf-8"); returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1"));            //保存的文件名,必须和页面编码一致,不然乱码
    response.addHeader("Content-Disposition",   "attachment;filename=" + returnName); response.setContentLength(byteArrayOutputStream.size()); ServletOutputStream outputstream = response.getOutputStream();    //取得输出流
    byteArrayOutputStream.writeTo(outputstream);                    //写到输出流
    byteArrayOutputStream.close();                                    //关闭
    outputstream.flush();                                            //刷数据
 } }
相关文章
相关标签/搜索