Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的问题
作者:Oxye 时间:2023-05-12 15:30:00
1.问题:
昨天把项目打包放到国产中间件东方通(外部容器,功能类似Tomcat)上时,发现某些请求下载文件的接口不能正确返回文件,而是返回一个空的文件,名称是接口名最后一个词fj,
然而这个功能直接使用IDE启动时没问题的,打包放到Tomcat9上也没问题,那可能是东方通适配问题了
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版本老
使用IDEA打开class,在structure中查看,发现我们代码中用到的方法只有setHeader
再看一下集成的接口ServletResponse,发现只找到setContentType、setCharacterEncoding
看一下程序依赖的版本,好吧,新版本有这个方法
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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SpringBoot @Cacheable自定义KeyGenerator方式
![](https://img.aspxhome.com/file/2023/9/88069_0s.png)
详解C# 泛型中的数据类型判定与转换
![](https://img.aspxhome.com/file/2023/2/80082_0s.png)
springboot过滤器和拦截器的实例代码
浅谈Java锁的膨胀过程以及一致性哈希对锁膨胀的影响
![](https://img.aspxhome.com/file/2023/4/74974_0s.jpg)
Java如何从json字符串中获取某个值详解
![](https://img.aspxhome.com/file/2023/6/108386_0s.png)
Android播放音乐案例分享
![](https://img.aspxhome.com/file/2023/7/139447_0s.jpg)
Android使用FontMetrics对象计算位置坐标
![](https://img.aspxhome.com/file/2023/6/110736_0s.png)
android studio 项目 :UI设计高精度实现简单计算器
![](https://img.aspxhome.com/file/2023/2/98622_0s.png)
教你使用idea搭建ssm详细教程(Spring+Spring Mvc+Mybatis)
![](https://img.aspxhome.com/file/2023/6/62736_0s.png)
Kotlin与java8的SAM转换对比(进阶)
![](https://img.aspxhome.com/file/2023/0/75700_0s.png)
Java中计算时间差的方法
Room Kotlin API的使用入门教程
深入讲解SPI 在 Spring 中的应用
![](https://img.aspxhome.com/file/2023/9/105909_0s.png)
深入浅析jni中的java接口使用
![](https://img.aspxhome.com/file/2023/8/63168_0s.png)
WPF PasswordBox进行数据绑定方法
解决Spring国际化文案占位符失效问题的方法
java selenium 常见web UI 元素操作及API使用
详解JAVA类加载机制(推荐)
Android导航栏功能项的显示与屏蔽介绍
java开发AOP面向切面编程入门
![](https://img.aspxhome.com/file/2023/1/122951_0s.png)