Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题

作者:Oxye 时间:2023-05-12 15:30:00 

1.问题:

昨天把项目打包放到国产中间件东方通(外部容器,功能类似Tomcat)上时,发现某些请求下载文件的接口不能正确返回文件,而是返回一个空的文件,名称是接口名最后一个词fj,

然而这个功能直接使用IDE启动时没问题的,打包放到Tomcat9上也没问题,那可能是东方通适配问题了

Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题

2.原代码:

部署在服务器上系统以后,在线打断点,发现跑到这一部分就在第三行位置执行不下去


response.setContentType("application/force-download");
response.setCharacterEncoding("utf-8");
response.setContentLengthLong(fileMetaData.getSize());
response.setHeader("Content-Disposition", "attachment;filename=" + encodeChineseDownloadFileName(request, qualifiedFileName));

3.错误原因:

servlet-api.jar 版本问题,系统使用了新版本的方法,东方通上旧版本jar没这个方法

4.解决

response是HttpServletResponse类型的,
看一下这个类在哪:javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar!\javax\servlet\http\HttpServletResponse.class

发现这个类是javax.servlet-api-4.0.1.jar包里的类

我在迁移系统到TongWeb上的时候,做了一些jar包改动,依稀记得看到过lib下使用的是servlet-api.jar

我把jar下下来,压缩文件打开,去寻找此类,发现这些文件都是2012年的,说明这版东方通使用的servlet-api版本老

Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题

使用IDEA打开class,在structure中查看,发现我们代码中用到的方法只有setHeader

Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题

再看一下集成的接口ServletResponse,发现只找到setContentType、setCharacterEncoding

Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题

看一下程序依赖的版本,好吧,新版本有这个方法

Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题

5.新代码:

去掉这一行,接口返回正确的文件


response.setContentType("application/force-download");
response.setCharacterEncoding("utf-8");
//response.setContentLengthLong(fileMetaData.getSize());
response.setHeader("Content-Disposition", "attachment;filename=" + encodeChineseDownloadFileName(request, qualifiedFileName));

来源:https://blog.csdn.net/weixin_43859729/article/details/107253205

标签:java,部署,服务器
0
投稿

猜你喜欢

  • SpringBoot @Cacheable自定义KeyGenerator方式

    2022-12-25 13:23:11
  • 详解C# 泛型中的数据类型判定与转换

    2023-05-03 08:08:36
  • springboot过滤器和拦截器的实例代码

    2021-09-14 04:53:17
  • 浅谈Java锁的膨胀过程以及一致性哈希对锁膨胀的影响

    2023-06-03 15:03:38
  • Java如何从json字符串中获取某个值详解

    2023-11-18 12:18:12
  • Android播放音乐案例分享

    2023-08-27 14:41:31
  • Android使用FontMetrics对象计算位置坐标

    2023-02-06 15:35:20
  • android studio 项目 :UI设计高精度实现简单计算器

    2022-07-14 02:09:29
  • 教你使用idea搭建ssm详细教程(Spring+Spring Mvc+Mybatis)

    2021-09-23 12:37:42
  • Kotlin与java8的SAM转换对比(进阶)

    2023-05-15 11:50:35
  • Java中计算时间差的方法

    2023-11-15 10:35:44
  • Room Kotlin API的使用入门教程

    2023-11-07 07:06:35
  • 深入讲解SPI 在 Spring 中的应用

    2022-10-21 03:44:55
  • 深入浅析jni中的java接口使用

    2023-07-22 19:54:23
  • WPF PasswordBox进行数据绑定方法

    2022-05-23 03:53:11
  • 解决Spring国际化文案占位符失效问题的方法

    2022-10-20 23:42:23
  • java selenium 常见web UI 元素操作及API使用

    2021-08-30 00:50:18
  • 详解JAVA类加载机制(推荐)

    2021-08-10 04:43:10
  • Android导航栏功能项的显示与屏蔽介绍

    2022-09-27 06:38:55
  • java开发AOP面向切面编程入门

    2021-08-22 04:47:56
  • asp之家 软件编程 m.aspxhome.com