热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

这篇文章主要介绍了Java程序部署到服务器上,接口请求下载文件失败文件为空文件名不对,本文给大家分享错误原因及解决方法,需要的朋友可以参考下

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));

到此这篇关于Java程序部署到服务器上,接口请求下载文件失败/文件为空/文件名不对的文章就介绍到这了,更多相关java程序部署服务器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • 本文介绍如何将自定义项目设置为Tomcat的默认访问项目,使得通过IP地址访问时直接展示该自定义项目。提供了三种配置方法:修改项目路径、调整配置文件以及使用WAR包部署。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • 本文详细介绍了C++中map容器的多种删除和交换操作,包括clear、erase、swap、extract和merge方法,并提供了完整的代码示例。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
author-avatar
晓雷sky
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有