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程序部署服务器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • IDEA部署JavaWeb项目到Tomcat服务器的方法

    IDEA创建一个传统JAVA WEB项目(不使用maven构建) 方法一 File --> NEW --> Project --> Java (勾选Web Application) 方法二 File --> NEW --> Project --> Java Enterprise(勾选Web Application) IDEA部署JAVA WEB项目 IDEA 并非把项目放到 tomcat 的 webapp目录中,而项目还是在源项目目录中,IDEA采用了一种无入侵Tomc

  • Linux服务器部署JavaWeb项目完整教程

    本文大部分参考网上其他教程,是实际操作后回过头来的一些总结,希望可以对正在部署项目的你有所帮助. 基本环境:Centos7.tomcat8.jdk8,MySQL5.6.nginx 安装JDK yum install java-1.8.0-openjdk* -y 使用yum安装,无需配置系统环境,执行完这条命令后JDK就安装好了. 安装Mysql 我们这里使用Mysql,如果使用MariaDB ,一般云服务器有安装,只需要升级就可以. 安装步骤: # wget http://dev.mysql.c

  • 部署Java在服务器端的EJB组件的方法

    什么是EJB? EJB 是 Java 企业Bean, 是JavaEE服务端 企业组件模型,它的设计目标与核心应用是部署分布式应用程序.话不多说,直接看如何在本机部署EJB3.   部署环境: 操作系统:Windows 8.1 EJB容器:Jboss 7.1 DB: MySQL 5.6.10 IDE: MyEclipse 10 JDK: 1.6   1.创建数据库.表 由于在此过程中,需要和数据库通信,需要首先创建数据库表. 创建数据库: create database student; //创建

  • javaWeb项目部署到阿里云服务器步骤详解

    记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以完成打包,如下图: 2.安装Xshell和Xftp两种软件 简单介绍下这两种软件作用(详情请百度相关文档) Xshell:通过网络连接到远程服务器主机. Xftp:能在Linux.Unix和Windows之间互传文件. 3.通过Xshell连接远程主机,如下图    4.创建会话完成,点击连接,显示

  • JavaWeb项目部署到服务器详细步骤详解

    JavaWeb项目部署到服务器详细步骤 本地准备 在eclipse中将项目打成war文件:鼠标右键要部署到服务器上的项目 导出项目数据库文件 MySql导出数据库文件方法:利用Navicat for MySQL.鼠标右键要导出的数据库,选择转出SQL文件即可 Oracle导出数据库文件:利用PLSQL Developer即可 服务器准备 基本的jdk安装,服务器(比如tomcat)还有数据库的安装都必不可少 将项目的war文件复制到tomcat的wepapps文件夹下即可 创建和代码中数据库连接

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

    1.问题: 昨天把项目打包放到国产中间件东方通(外部容器,功能类似Tomcat)上时,发现某些请求下载文件的接口不能正确返回文件,而是返回一个空的文件,名称是接口名最后一个词fj, 然而这个功能直接使用IDE启动时没问题的,打包放到Tomcat9上也没问题,那可能是东方通适配问题了 2.原代码: 部署在服务器上系统以后,在线打断点,发现跑到这一部分就在第三行位置执行不下去 response.setContentType("application/force-download"); re

  • SpringBoot项目部署到服务器上的方法(Jar包)

    1. 部署方式 Springboot 和普通web 应用程序不一样,其本质上是一个 Java 应用程序,那么又如何部署呢?  通常来说,Springboot 部署会采用两种方式:全部打包成一个jar,或者打包成一个war.现在讲一下打包成 jar 部署. 2. 打包成 jar 第一种方法(idea) 1. clean 2. package 第二种方法(命令行): 键盘输入 windows + r : cd 命令切换到你项目所在路径: online 是我的项目名称,这里换成你自己的,可以看到当前是

  • SpringBoot 部署到服务器上的方法

    如下所示: 1.你先打出一个 jar包 2.然后上传到服务器上 3.找到jdk 所在位置(后面的&号,是可以后台执行的命令哟):~/local/jdk1.8.0_92/bin/java -jar demo1-0.0.1-SNAPSHOT.jar & 4.查看端口是否在用:netstat -nlp | grep 你的端口号 以上这篇SpringBoot 部署到服务器上的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: 详解Spring

  • 浅谈如何把Node项目部署到服务器上

    目录 1. 如何合理选购一台服务器 1.1. 服务器位置的选择: 1.2. 服务器镜像的选择: 1.3. 服务器系统盘存储的选择: 1.4. 服务器带宽选择: 1.5. 服务器规格选择: 2. 如何将域名解析到服务器上 3. 服务器配套软件的安装和环境配置 4. 通过命令行上传自己的网站到服务器 5. 网站部署和运维 5.1. 安装应用 5.2. 启动应用 1. 如何合理选购一台服务器 对于服务器的选择,我们主要有以下几种选择: 1. 阿里云: 2. 腾讯云: 3. 华为云: 4. 亚马逊云:

  • 解决Angular4项目部署到服务器上刷新404的问题

    刚遇到Angular4项目npm run build 后部署到服务器可以访问,但是刷新页面会出现404的错误!在网上搜了一下看到有些人写的解决办法还有错误在里面,一眼看就知道的错误,感觉这些人真的有毛病,决定写了博客,为什么那么不仔细,写错误的上去,祸害别人吗!! 解决angular2页面刷新后报404错误办法: 配置app.module.ts import {HashLocationStrategy , LocationStrategy} from '@angular/common'; @Ng

  • go程序部署到linux上运行的实现方法

    目录 一.win10上的操作 二.linux 端 ubuntu go 语言版本:go1.9.2 开发环境:win10 部署环境:ubuntu 14.04.6 一.win10上的操作 1.在src目录下依次执行set CGO_ENABLED=0.set GOOS=linux.set GOARCH=amd64命令 2.进入主项目目录,执行go build 程序入口文件.我这里是main.go go build main.go 报“cannot find package "golang.org/x/s

  • Java性能工具JMeter实现上传与下载脚本编写

    目录 一.前言 二.预备知识 1.构造方法 2.创建功能 3.重命名和删除功能 4.获取功能 三.Java 实现文件上传下载功能 1.服务下载代码 2.前端代码 3.运行效果 四.JMeter 文件上传与下载脚本编写 1.文件上传脚本 2.文件下载脚本 五.总结 一.前言 性能测试工作中,文件上传也是经常见的性能压测场景之一,那么 JMeter 文件上传下载脚本怎么做? 知识点: Java 实现文件上传下载功能 JMeter 文件上传与下载脚本编写 二.预备知识 先学习下 Java API 关于

  • Java对Excel表格的上传和下载处理方法

    Excel表格文件的上传和下载,java中涉及到文件肯定会有io流的知识. 而excel文件就要涉及到poi技术,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 这里我是按照正规的项目流程做的案例,所以可能会比网上的一些Demo复杂一些.不过文件的上传和下载基本都是一套固定的流程,只是每个人的实现方式不太相同. 数据库我用的是MySql. 下面是我的项目目录: 按照正常的项目做了分层处理,文件上传的业务我放到了service处理,而文件

  • sqlserver 2005 无法在服务器上访问指定的路径或文件

    刚装的sql server 2005系统,附加数据库是出现如下提示 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA 无法在服务器上访问指定的路径或文件.请确保您具有必需的安全权限且该路径或文件存在. 如果您确定所用服务帐户可以访问特定的文件,请在"定位"对话框的"文件名"控件中键入该文件的完整路径. 接着出现定位数据库文件的框,里面没有盘符,根本选择不了数据库 郁闷了半个下午,记得曾经出现过了这个问题

  • java模拟客户端向服务器上传文件

    本文实例为大家分享了java客户端向服务器上传文件的具体代码,供大家参考,具体内容如下 先来了解一下客户端与服务器Tcp通信的基本步骤: 服务器端先启动,然后启动客户端向服务器端发送数据. 服务器端收到客户端发送的数据,服务器端会响应应客户端,向客户端发送响应结果. 客户端读取服务器发送的数据 文件上传步骤: 客户端使用本地字节输入流,指定上传数据的数据源. 客户端使用网络字节输出流,把读取的本地文件上传到服务器. 服务器使用网络字节输入流,读取客户端上传的文件. 服务器使用本地字节输出流,把读

随机推荐