springboot类路径下excel、word文件下载为空和打不开记录

这篇具有很好参考价值的文章主要介绍了springboot类路径下excel、word文件下载为空和打不开记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

下载为空问题原因

下载为空这个原因很简单,新同事写的下载是这样写的,这种只能在本地用下,打包上线后就g了…

	  String fileName = "test.xlsx";
      String filePath = System.getProperty("user.dir")+"\\src\\main\\resource\\staitc\\"+fileName;
      File file = new File(filePath);
      FileInputStream fileInputStream = new FileInputStream(file);

      IOUtils.copy(fileInputStream, response.getOutputStream());
      response.setContentType("application/vnd.ms-excel;charset=UTF-8");
      response.setHeader("Content-disposition","attachment:fileName="+ URLEncoder.encode(fileName,"UTF-8"));
      response.setContentLength(fileInputStream.getChannel().size());

这个问题不大,只要换种方式读取类路径下文件即可,

InputStream resourceAsStream = this.getClass().getResourceAsStream("/static/" + fileName);

重点是下面这个打不开的问题

下载打不开问题现象和原因

在springboot工程的类路径下 /static/ 目录下创建了一个模板excel文件,比如 template.xlsx,写的文件下载功能将这个文件下下来的时候无法打开,提示内容已损坏。

一开始我以为是下载的写法有问题,比如响应头的content-type设置不对,content-length没有设置等问题导致的,最终发现是类路径下的excel编译后,会变成原来的大

出现原因是因为同事在 pom.xml 中配置了 配置了

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
        </profile>
		// 省略几个 profile
        <profile>
            <id>prod</id>
            <properties>
                <profileActive>prod</profileActive>
            </properties>
        </profile>

    </profiles>


    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>utf-8</encoding>
                    <useDefaultDelimiters>true</useDefaultDelimiters>
                </configuration>
            </plugin>
        </plugins>
    </build>

项目中按照不同的环境写了多个环境的配置文件

-application.yml
-application-dev.yml
-application-test.yml
-application-prod.yml

在 application.yml 中

spring:
	profiles:
		active: @profileActive@

此时因为pom配置的true,所以会导致其上配置的directory配置的路径下的资源都会经过maven一次处理,会将其内的@@包含的变量使用其定义的变量替换。

        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
        </profile>

我这里配置的默认激活的是dev的配置,所以默认会使用 dev这个变量去覆盖所有类路径下的 @profileActive@,也即打包后的application.yml如下

spring:
	profiles:
		active: dev

而在处理excel、word等文件时,处理会其会变大且无法打开…不清楚怎么造成变大。

解决方案

在maven的 maven-resources-plugin 插件中添加配置 xlsx,表示不对xlsx为后缀的文件处理,点击该标签可以看到其默认已经对于图片文件进行处理,所以图片文件大小不会变。

Additional file extensions to not apply filtering (already defined are : jpg, jpeg, gif, bmp, png)
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
    <encoding>utf-8</encoding>
    <useDefaultDelimiters>true</useDefaultDelimiters>
    <nonFilteredFileExtensions>xlsx</nonFilteredFileExtensions>
</configuration>

该配置项是个集合类型,可以以逗号分隔配置多个:比如 xlsx,docx文章来源地址https://www.toymoban.com/news/detail-547065.html

到了这里,关于springboot类路径下excel、word文件下载为空和打不开记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot通过前端发起请求,拿到数据库中的数据并生成excel表格,postman请求并下载文件

    springboot版本3.2.0,数据库版本8 mybatisplus版本3.5.4.1 依赖 实体类 实体类中的枚举类型转换,因调用方法后还是不能转换类型所以暂未解决 Controller层 postman测试 Excel表格 获取数据成功

    2024年01月18日
    浏览(41)
  • uniapp下载文件 例(Word)以及下载其他文件,Word文件的转发,保存,查看

     直接复制用就可以,建议直接复制 JS 部分然后修改了我写的URL即可  html部分 JS部分 ---------------------- 其实只复制这部分就够了,改一下url地址就可以了   CSS样式 注意=========================================真机浏览效果如最后一张图片 这段代码可以实现 查看,分享,保存,  会

    2024年02月11日
    浏览(91)
  • MacBook 百度网盘|百度云 文件下载路径 自定义文件下载地址

    macOS 中使用百度网盘下载文件,可是不知道 下载好的文件存放在哪里 ,也没有办法自定义文件下载地址。 原因:下载使用了 错误的百度网盘版本 。 机型: 注意M1芯片 在 app store 中搜索 百度网盘 ,在 iPhone iPad Apps 中可以看到 百度网盘 HD 供iPad下载使用,在我的Mac上安装后

    2024年02月09日
    浏览(58)
  • 前端对后端路径的下载//流文件下载

    1.前端对后端路径的下载  2.流文件下载

    2024年02月16日
    浏览(53)
  • WORD模板替换,将文件给前端下载

    1.word模板设计填充字段加{{填充字段名}} 2.后端依赖 3.后端代码 3.1工具类 3.2接口类 4.前端事件方法 handleDownload(row) {       this.queryParams = row       console.log(row)       this.download(\\\'system/selection/wordTemplate\\\', {         ...this.queryParams       }, `selection_${new Date().getTime()}.docx`)    

    2024年02月13日
    浏览(42)
  • flutter 文件下载及存储路径

    日常开发中,经常会遇到下载文件的功能,往往我们在需要保存文件的路径上去调试,比如Android中的路径,有些会报错在SD卡中,但是有些手机,又没有SD卡,那么我们该怎么办呢? 为了功能的完善,往往需要一个下载的进度条,当然,UI怎么美化不管,核心代码如下: 上面

    2024年02月01日
    浏览(41)
  • vue3 pdf、word等文件下载

     效果:     table组件

    2024年02月11日
    浏览(52)
  • Selenium修改默认下载文件路径

    学习Selenium时,涉及到文件下载时,通常默认下载在C盘,这时当你下载很多数据时,这将占用你很大的内存导致系统很卡;同时考虑到对下载的数据进行处理,因此指定一个目录更方便进行后续的工作。 因为我们使用的是google浏览器,因此采用更改Chrome浏览器的首选项来实现

    2024年02月11日
    浏览(42)
  • 修复路径遍历或任意文件下载漏洞

    一、问题描述         路径遍历是指应用程序接收了未经合理校验的用户参数用于进行与文件读取查看相关操作,而该参数包含了特殊的字符(例如“..”和“/”),使用了这类特殊字符可以摆脱受保护的限制,越权访问一些受保护的文件、目录或者覆盖敏感数据。   

    2024年02月13日
    浏览(46)
  • vue excel文件下载

    这个文件是utils/index.js文件里面的,后面要用到。 里面可以传入一些参数和做了IE浏览器的判断,IE浏览器下载的时候,不能使用a标签,所以如果不做判断是没有反应的。 大概就是这些。

    2024年02月16日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包