文件下载(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('\n');
}
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 => {})
    },

  

猜你喜欢

转载自www.cnblogs.com/godpo/p/11926914.html