Java程序部署到服務(wù)器上,接口請求下載文件失敗/文件為空/文件名不對的問題
1.問題:
昨天把項(xiàng)目打包放到國產(chǎn)中間件東方通(外部容器,功能類似Tomcat)上時(shí),發(fā)現(xiàn)某些請求下載文件的接口不能正確返回文件,而是返回一個(gè)空的文件,名稱是接口名最后一個(gè)詞fj,
然而這個(gè)功能直接使用IDE啟動時(shí)沒問題的,打包放到Tomcat9上也沒問題,那可能是東方通適配問題了

2.原代碼:
部署在服務(wù)器上系統(tǒng)以后,在線打斷點(diǎn),發(fā)現(xiàn)跑到這一部分就在第三行位置執(zhí)行不下去
response.setContentType("application/force-download");
response.setCharacterEncoding("utf-8");
response.setContentLengthLong(fileMetaData.getSize());
response.setHeader("Content-Disposition", "attachment;filename=" + encodeChineseDownloadFileName(request, qualifiedFileName));
3.錯(cuò)誤原因:
servlet-api.jar 版本問題,系統(tǒng)使用了新版本的方法,東方通上舊版本jar沒這個(gè)方法
4.解決
response是HttpServletResponse類型的,
看一下這個(gè)類在哪:javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar!\javax\servlet\http\HttpServletResponse.class
發(fā)現(xiàn)這個(gè)類是javax.servlet-api-4.0.1.jar包里的類
我在遷移系統(tǒng)到TongWeb上的時(shí)候,做了一些jar包改動,依稀記得看到過lib下使用的是servlet-api.jar
我把jar下下來,壓縮文件打開,去尋找此類,發(fā)現(xiàn)這些文件都是2012年的,說明這版東方通使用的servlet-api版本老

使用IDEA打開class,在structure中查看,發(fā)現(xiàn)我們代碼中用到的方法只有setHeader

再看一下集成的接口ServletResponse,發(fā)現(xiàn)只找到setContentType、setCharacterEncoding

看一下程序依賴的版本,好吧,新版本有這個(gè)方法

5.新代碼:
去掉這一行,接口返回正確的文件
response.setContentType("application/force-download");
response.setCharacterEncoding("utf-8");
//response.setContentLengthLong(fileMetaData.getSize());
response.setHeader("Content-Disposition", "attachment;filename=" + encodeChineseDownloadFileName(request, qualifiedFileName));
到此這篇關(guān)于Java程序部署到服務(wù)器上,接口請求下載文件失敗/文件為空/文件名不對的文章就介紹到這了,更多相關(guān)java程序部署服務(wù)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java操作gaussDB數(shù)據(jù)庫的實(shí)現(xiàn)示例
本文主要介紹了java操作gaussDB數(shù)據(jù)庫的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
5分鐘快速創(chuàng)建spring boot項(xiàng)目的完整步驟
這篇文章主要給大家介紹了關(guān)于通過5分鐘快速創(chuàng)建spring boot項(xiàng)目的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Java Redis分布式鎖的正確實(shí)現(xiàn)方式詳解
這篇文章主要介紹了Java Redis分布式鎖的正確實(shí)現(xiàn)方式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
劍指Offer之Java算法習(xí)題精講字符串與二叉搜索樹
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化2022-03-03
利用HttpUrlConnection 上傳 接收文件的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄肏ttpUrlConnection 上傳 接收文件的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
SpringBoot為啥不用配置啟動類的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot為啥不用配置啟動類的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

