zoukankan      html  css  js  c++  java
  • 文件下载(download) 前后台备注自用

    1、后台

          1.1 ResponseBean 返回封装的格式

    @Data
    @Accessors(chain = true)
    public class ResponseBean {
        private String retCode;
        private String retMsg;
        private Map<Object, Object> retMap;
    
    }
    

      1.2请求封装的格式

    @Data
    @Accessors(chain = true)
    public class RequestBean {
        private Map sysMap;
        private List<Object> parameterList;
    
    }
    

      1.3后台服务接口

    package com.test.demo.controller;

    import com.test.demo.common.RequestBean;
    import com.test.demo.common.ResponseBean;
    import com.test.demo.common.RetCode;
    import com.test.demo.util.FileUtil;
    import io.swagger.annotations.ApiOperation;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Objects;

    /**
    * @description: 文件相关
    * @author: ZhuGaoPo
    * @version:1.0
    */
    @Slf4j
    @RequestMapping(value = "/file")
    @RestController
    public class FileController {

    @PostMapping(value = "/downloadFile")
    @ApiOperation("文件下载到本地")
    public ResponseBean downloadFile(@RequestBody RequestBean requestBean) {
    log.info("接收到的数据为:" + requestBean);
    ResponseBean response = new ResponseBean();
    String filePath = String.valueOf(requestBean.getParameterList().get(0));
    BufferedReader br = null;
    try {
    br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "GBK"));
    StringBuilder stringBuilder = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
    stringBuilder.append(line).append(' ');
    }
    response.setRetCode(RetCode.SUCCESS);
    Map<Object, Object> retMap = new HashMap<>(RetCode.MAP_SIZE);
    retMap.put("data", stringBuilder.toString());
    response.setRetMap(retMap);
    } catch (Exception e) {
    response.setRetCode(RetCode.FAIL);
    log.error("下载模板失败", e);
    } finally {
    try {
    Objects.requireNonNull(br).close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    log.info("返回的数据为:" + response);
    return response;
    }
    }

      2、前台

                 <el-button type="warning" plain @click="downloadFile()">
                   下载
                  </el-button>
    

      

     downloadFile() {
    //filePath为文件服务的路径
          const data = {
            sysMap: {
              features: '下载模板'
            },
            parameterList: [this.filePath]
          }
          this.$request({
            url: '/file/downloadFile',
            method: 'post',
            data
          }).then(res => {
            if (res.retCode === 'IF0000') {
              // 成功、加上 ‘ufeff’ 解决导出 csv 乱码问题
              const blob = new Blob(['ufeff' + res.retMap.data], { type: 'application/json;charset=UTF-8' })
              const a = document.createElement('a')
              // 指定下载的文件名
              a.download = '黑名单模板.csv'
              // URL对象
              a.href = URL.createObjectURL(blob)
              // 模拟点击
              a.click()
            } else {
              return false
            }
          }).catch(e => {})
        },
    

      

  • 相关阅读:
    oracle over 函数几个例子
    securecrt 方向键乱码解决
    windows 8.1 启用hyper-v导致vmware 无法使用的问题解决方案(兼顾WP8.1模拟器和vmware)
    oracle 查询所有约束
    home条 防止误碰
    导航栏相关知识
    报错Domain=NSCocoaErrorDomain Code=3840 "Garbage at end."
    H5混合开发问题总结
    适配iOS11
    网络
  • 原文地址:https://www.cnblogs.com/godpo/p/11926914.html
Copyright © 2011-2022 走看看