easyexcel实现导出excel文件到s3服务器

常见的做法一般是直接通过请求接口响应对象response把文件输出

/**
     * 导出列表
     *
     * @param request
     * @param response
     */
    @Override
    public void export(AuctionRequest request, HttpServletResponse response) throws IOException {
        Map<String, Object> queryMap = Maps.newHashMap(BeanConvertUtils.beanToMap(request));
        List<Auction> auctions = auctionManager.listAuctions(queryMap);
        if (CollectionUtils.isEmpty(auctions)) {
            throw new AuctionException("当前数据为空");
        }

        List<AuctionDataExportModel> auctionExportModels = auctions.stream().map(item -> {
            AuctionDataExportModel auctionExportModel = new AuctionDataExportModel();
            auctionExportModel.setAuCode(item.getAuCode());
            auctionExportModel.setAuTitle(item.getAuTitle());
         
            return auctionExportModel;
        }).collect(Collectors.toList());

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode("导出", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + System.currentTimeMillis() + ".xlsx");
        EasyExcel.write(response.getOutputStream(), AuctionDataExportModel.class).sheet("数据区").doWrite(auctionExportModels);

    }



这样操作乍一看没啥问题.但是我这边前端同事是使用的axios发送的请求,必须指定响应类型为 ‘arraybuffer’ 或者 ‘blob’.

axios({
  method: 'post',
  url: '/export',
  responseType: 'arraybuffer',//'blob'
}).then(res => {})

正常下载是没有问题的,一旦代码报错.因为指定了响应类型.就拿不到返回的错误信息了.

于是采用了成功的时候后端直接把文件上传到s3服务器,然后把文件地址返给前端.出错的时候把错误信息返给前端,就解决了上述的问题

直接上代码

/**
     * 导出列表
     *
     * @param request
     */
    @Override
    public String export(AuctionRequest request) {
        Map<String, Object> queryMap = Maps.newHashMap(BeanConvertUtils.beanToMap(request));
        List<Auction> auctions = auctionManager.listAuctions(queryMap);
        if (CollectionUtils.isEmpty(auctions)) {
            throw new AuctionException("当前数据为空");
        }

        List<AuctionDataExportModel> auctionExportModels = auctions.stream().map(item -> {
            AuctionDataExportModel auctionExportModel = new AuctionDataExportModel();
            auctionExportModel.setAuCode(item.getAuCode());
            auctionExportModel.setAuTitle(item.getAuTitle());
            
            return auctionExportModel;
        }).collect(Collectors.toList());


        //上传至s3服务器,同时将路径返回给前台
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        EasyExcel.write(bos, AuctionDataExportModel.class).sheet("数据区").doWrite(auctionExportModels);
        byte[] binary = bos.toByteArray();
        InputStream inputStream = new ByteArrayInputStream(binary);
        String excelName = "导出" + IdWorker.getMillisecond() + ".xls";
        String returnFilePath = CommonsConstants.STORE_AUCTION_SYNC_EXCEL + excelName;
        PutObjectResult putObjectResult = s3Util.uploadFile(inputStream, "xls", returnFilePath);
        org.wildfly.common.Assert.assertNotNull(putObjectResult);
        return returnFilePath;

    }

相关推荐

  1. easyexcel实现导出excel文件s3服务器

    2024-03-13 05:38:09       42 阅读
  2. Spring Boot + EasyExcel实现Excel文件导入导出

    2024-03-13 05:38:09       55 阅读
  3. springboot使用EasyExcel实现Excel导入导出

    2024-03-13 05:38:09       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 05:38:09       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 05:38:09       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 05:38:09       87 阅读
  4. Python语言-面向对象

    2024-03-13 05:38:09       96 阅读

热门阅读

  1. Python控制摄像头并获取数据文件

    2024-03-13 05:38:09       43 阅读
  2. 搜索与图论——DFS

    2024-03-13 05:38:09       41 阅读
  3. IOS面试题object-c 91-100

    2024-03-13 05:38:09       45 阅读
  4. Redis 大key和热key问题及处理

    2024-03-13 05:38:09       41 阅读
  5. 深度学习踩坑记录(持续更新)

    2024-03-13 05:38:09       38 阅读
  6. GPU 显存

    2024-03-13 05:38:09       42 阅读
  7. IOS面试题object-c 101-110

    2024-03-13 05:38:09       37 阅读
  8. Python和RPA之间的区别和联系

    2024-03-13 05:38:09       41 阅读
  9. Leetcode 572 另一棵树的子树

    2024-03-13 05:38:09       45 阅读
  10. 二十、HTML

    2024-03-13 05:38:09       49 阅读