zoukankan      html  css  js  c++  java
  • vue+springboot文件下载

    //vue element-ui
    <el-button size="medium" type="primary" @click="download">导出</el-button>
      //js
      downLoad(){
         window.location.href="/api/downLoad";
      },
     
    //后台java

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.util.HashMap;
    import java.util.Map;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.io.IOUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;


    @RestController
    public class DownLoadFile {

      private static Logger log = LoggerFactory.getLogger(DownLoadFile.class);

      @RequestMapping(value = "/downLoad", method = RequestMethod.GET)
      public static final String downLoad(HttpServletResponse res) throws UnsupportedEncodingException {
        Map<String, Object> reMap = new HashMap<>();
        //文件名 可以通过形参传进来
        String fileName = "t_label.txt";
        //要下载的文件地址 可以通过形参传进来
        String filepath = "f:/svs/" + fileName;

        OutputStream os = null;
        InputStream is = null;
        try {
          // 取得输出流
          os = res.getOutputStream();
          // 清空输出流
          res.reset();
          res.setContentType("application/x-download;charset=GBK");
          res.setHeader("Content-Disposition",
            "attachment;filename=" + new String(fileName.getBytes("utf-8"), "iso-8859-1"));
          // 读取流
          File f = new File(filepath);
          is = new FileInputStream(f);
          if (is == null) {
            reMap.put("msg", "下载附件失败");
          }
          // 复制
          IOUtils.copy(is, res.getOutputStream());
            res.getOutputStream().flush();
          } catch (IOException e) {
            reMap.put("msg", "下载附件失败,error:" + e.getMessage());
          }
          // 文件的关闭放在finally中
          finally {
            try {
              if (is != null) {
                is.close();
              }
            } catch (IOException e) {
              log.error(e.toString());
            }
            try {
              if (os != null) {
                os.close();
              }
            } catch (IOException e) {
              log.error(e.toString());
            }
          }
          String str = JsonUtil.map2Json(reMap);
          return str;
        }

    }

    说明:此代码用火狐浏览器测试的时候没问题,谷歌版本以及设置不一样可能会出现文件下载错误,甚至不直接弹出另存为的对话框

  • 相关阅读:
    【MyBatis】Inappropriate OGNL expression
    【java】前补零
    【js】前补零
    【Java】导出excel.xlsx
    【插件】fileinput
    【前端】WebSocket is already in CLOSING or CLOSED state?
    【HTML】input标签添加提示内容
    学习问题记录 -- 对象和引用
    八数码难题
    Java 逻辑运算符 & 与 &&的区别
  • 原文地址:https://www.cnblogs.com/xuchao0506/p/12681480.html
Copyright © 2011-2022 走看看