使用java和react关于EasyExcel导出图片的问题,文件打开提示已损坏

news/2024/6/15 12:02:57 标签: java, react.js

javareactEasyExcel_0">使用java和react关于EasyExcel导出图片的问题,文件打开提示已损坏


这是alibaba开放的一个导出工具,便捷好用,参考官方文档:
https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write#%E5%9B%BE%E7%89%87%E5%AF%BC%E5%87%BA

1.先说一下EasyExcel导出图片,这里主要说一下导出远程图片,其他的后面再补充
1.1 要导出的图片字段:

java">import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.converters.url.UrlImageConverter;
import lombok.Data;

import java.net.URL;

@Data
@ContentRowHeight(40)
@ColumnWidth(25)
public class ExportExcel {
    @ExcelProperty(value = "Event Photo", converter = UrlImageConverter.class)
    private URL imagePath;
}

1.2 给字段赋值

java">try {
	ExportExcel exportExcel = new ExportExcel();
    exportExcel.setImagePath(new URL("https//....远程地址"));
} catch (MalformedURLException e) {
    e.printStackTrace();
}

1.3 写入数据

java">EasyExcel.write("test.xlsx", ExportExcel.class).sheet().doWrite(exportExcel);

2.后端返回乱码,文件下载后无法打开,提示已损坏
2.1 如果后端返回的是一堆乱码(blob),就需要前端修改一下文件下载的方法,参考链接:
http://t.csdnimg.cn/8s8GQ

java">import { request } from '@/utils/axios'
// 导出Excel公用方法
export function exportMethod(data: any) {
    return request({
        method: data.method,
        url: `${data.url}${data.params ? '?' + data.params : ''}`,
        responseType: 'blob',
        headers: {
            'Content-Type': 'application/json'
        }
    }).then((res) => {
        // console.log('明细导出')
        const link = document.createElement('a')
        let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' })
        link.style.display = 'none'
        link.href = URL.createObjectURL(blob)
 
        // link.download = res.headers['content-disposition'] //下载后文件名
        link.download = data.fileName //下载的文件名
        document.body.appendChild(link)
        link.click()
        document.body.removeChild(link)
    }).catch(error => {
        console.log(error)
    })
}

2.2 此时文件可以正常下载了,但是用office或者wps打开时提示已损坏
解决:前端请求导出接口后,增加返回类型 responseType: ‘blob’
参考链接:http://t.csdnimg.cn/JeIpa
在这里插入图片描述

java">export const exportExcelData = async (payload) => {
  return api.securedAxios().get("/web/export", {
    params: payload, responseType: 'blob'
  });
};

如果有遇到类似的问题,欢迎留言关注


http://www.niftyadmin.cn/n/5277571.html

相关文章

Python接口自动化测试实战(视频教程+源码)

接口自动化测试是指通过编写程序来模拟用户的行为,对接口进行自动化测试。Python是一种流行的编程语言,它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。 1、接口自动化测试框架 在Python接口自动化测试中,我们…

从入门到放弃之「ClickHouse」

文章目录 1. 写在最前面1.1 思路 2. ClickHouse2.1 基本概念2.2 高端用法2.2.1 条件判断2.2.2 HAVING2.2.3 CASE WHEN2.2.4 window function 3. 碎碎念4. 参考资料 1. 写在最前面 最近在整理 api 成功率的问题。但是总结下来以下三点是我分析路上的绊脚石。 上报链路还不够稳定…

【点选验证码识别】某招标网站反爬虫分析与验证码自动识别

文章目录 1. 写在前面2. 风控描述3. 验证码裁剪4. 验证码识别 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣…

Java_集合进阶(Collection和List系列)

一、集合概述和分类 1.1 集合的分类 已经学习过了ArrayList集合,但是除了ArrayList集合,Java还提供了很多种其他的集合,如下图所示: 我想你的第一感觉是这些集合好多呀!但是,我们学习时会对这些集合进行…

Java基于微信小程序的小区车位租赁系统的设计与实现

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 简介技术路线需求分析用户信息管理车位信息管理车位申请管理论坛信息管理 效果图推荐阅读 简介 …

一文了解提示工程(Prompt Engineering)

引言 在机器学习的世界里,有一句众所周知的话,“机器学习模型的好坏取决于您为其提供的训练数据。” 它指出了数据质量在您从这些算法中获得的结果中发挥的关键作用。 在使用生成式 AI 模型时,这一想法也很重要 - 无论它们生成文本、代码还…

【DP】62.不同路径

题目 法1&#xff1a;二维DP 必须掌握&#xff01; class Solution {public int uniquePaths(int m, int n) {int[][] matrix new int[m][n];Arrays.fill(matrix[0], 1);for (int i 0; i < m; i) {matrix[i][0] 1;}for (int i 1; i < m; i) {for (int j 1; j <…

PostgreSQL表中字段由字符串改为数组

需求&#xff1a;PostgreSQL数据库中的一张表的某些字段&#xff0c;之前存的是字符串&#xff0c;由于业务需求变更&#xff0c;需要存储多条数据&#xff0c;字段类型要改为数组&#xff0c;并保留原来的数据。 具体实现&#xff1a; 修改表中字段类型&#xff1a;把 etl_f…