vue.js 前端文件上传和下载至后台的处理过程,后台不存入服务器中,只是读取excel里面的内容

                                                 文件上传

1、前端使用的ant-design-vue的框架,即通过action传递给后台

2、后台的代码如下

public APIModel addInterfaceField(@RequestParam(value = "file") MultipartFile file){
    APIModel apiModel = new APIModel();
    //读取文件名
    String fileName = file.getOriginalFilename();
    //这个能读取到文件后,就好操作了,具体业务逻辑就不展示了
    logger.debug("importSPosition :{}", fileName);
    List<Field> interfaceFieldList = null;
    try {
        interfaceFieldList = frontendService.readExcelData(fileName, file.getInputStream());
        apiModel.set(0,"导入成功",interfaceFieldList);
    } catch (IOException e) {
        logger.warn("addInterfaceField happen exception because is :{}",e);
        apiModel.set(1,"导入失败,请联系负责人",interfaceFieldList);
    }

    return apiModel;
}

文件下载

1、前端代码,点击button

<a-button type="primary" @click="exportSql" >导出全部接口sql文件</a-button>

2、触发动作产生后台的动作

//window.open(apiStore.interface.exportSql.url);  //这个是在新的页面打开下载文件(参数是后台的url地址)

window.location.href = apiStore.interface.exportSql.url;//在本页面下载文件参数是后台的url地址)

//3、后台代码,不需要的在服务器上新建文件

//在controller层
public void exportSql(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //获取的是文件名字 
        String path = initParam.getExportSqlFile();
        logger.info("path :"+path);
          
        //String parent = InterfaceFieldController.class.getClassLoader().getResource("").getPath();
//        try {
//            parent = URLDecoder.decode(parent, "UTF-8");
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//        }
        //path = path.replace("classpath:", parent);
       if(StringUtils.isEmpty(path)){
           logger.warn("export sql fail because export sql file is null or ''");
           return ;
       }
        interfaceFieldService.setExportSqlContent(path);
        //获取文件名字
        String FileName = path;
        try {
            interfaceFieldService.writeResponse(FileName, path, request, response);
        } catch (Exception e) {
            logger.warn("write to sql file happen exception{}:",e);
            e.printStackTrace();
        }

    }
//在service层
private static void writeToSqlFile(String filePath,String content)throws Exception{
        //FileOutputStream out = null;
       // BufferedOutputStream bf= null;
        try{

            OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(filePath), "utf-8");
            oStreamWriter.append(content);
            oStreamWriter.flush();
            oStreamWriter.close();
//使用如下的话,默认生成的内容的编码格式是GBK
//            out=new FileOutputStream (filePath);
//            bf= new BufferedOutputStream(out);
//            bf.write(content.getBytes());
//            bf.flush();
//            bf.close();
        }catch (FileNotFoundException e){
        }
    }
//此处是核心,需要把文件内容返回给前端。
@Override
public void writeResponse(String fileName, String filePath, HttpServletRequest request, HttpServletResponse response) throws Exception {
    String header = request.getHeader("User-Agent").toUpperCase();
    if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
        fileName = URLEncoder.encode(fileName, "GBK");
        // //IE下载文件名空格变+号问题
        fileName = fileName.replace("+", "%20");
    } else {
        fileName = new String(fileName.getBytes(), "ISO8859-1");
    }
    response.setContentType("multipart/form-data");// 设置文件类型
    response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
    File file = new File(filePath);
    response.setCharacterEncoding("GBK");
    response.setHeader("Content-type", "text/html;charset=UTF-8");
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    try {
        bis = new BufferedInputStream(new FileInputStream(file));
        bos = new BufferedOutputStream(response.getOutputStream());
        byte[] buff = new byte[1024];
        int bytesRead = -1;
        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
            bos.write(buff, 0, bytesRead);
        }
        bos.flush();
    } finally {
        try {
            bis.close();
        } catch (IOException e) {
            logger.warn("bis close happen exption because is {}",e);
        }
        try {
            bos.close();
        } catch (IOException e) {
            logger.warn("bos close io happen exption because is {}",e);
        }

    }
}

 

 

到此文件上传和下载就完成了,欢迎大家指导指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值