生活随笔
收集整理的這篇文章主要介紹了
spring boot结合FastDFSClient做下载文件注意事项
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
spring boot結合FastDFSClient做下載文件注意事項
1.后臺下載方法走完后,前端頁面瀏覽器一直沒出現下載框。 2.ie瀏覽器兼容問題。
下面的FastDFSClient類依賴fdfsclient-jar-with-dependencies.jar包 下面是后臺代碼。
@ResponseBody@
RequestMapping ( value
= "/downloadXmlFileList" , method
= { RequestMethod
. GET , RequestMethod
. POST } , produces
= "text/html;charset=utf-8" ) @
ApiOperation ( value
= "下載" , notes
= "下載" , response
= Long
. class ) public void downloadXmlFileList ( HttpServletResponse response
, String ids
) { ResultBean
< String
> rs
= null ; try { List
< ImportXmlRecordData
> importXmlRecordDataList
= importXmlRecordService
. getAllFdfsclientfileidByIds ( ids
) ; if ( importXmlRecordDataList
!= null && ! importXmlRecordDataList
. isEmpty ( ) && importXmlRecordDataList
. size ( ) > 0 ) { ImportXmlRecordData importXmlRecordData
= importXmlRecordDataList
. get ( 0 ) ; byte
[ ] data
= FastDFSClient
. downloadFile ( importXmlRecordData
. getFdfsclientfileid ( ) ) ; FileUtil
. downloadFileByEncode_gb2312 ( response
, data
, importXmlRecordData
. getFilename ( ) ) ; } } catch ( Exception e
) { e
. printStackTrace ( ) ; } }
下面是上面代碼的解釋。 下面是FileUtil.downloadFileByEncode_gb2312方法。
public static void downloadFileByEncode_gb2312 ( HttpServletResponse response
, byte
[ ] data
, String showFileName
) { BufferedInputStream bis
= null ; OutputStream os
= null ; BufferedOutputStream bos
= null ; try { os
= response
. getOutputStream ( ) ; bos
= new BufferedOutputStream ( os
) ; String fileName
= new String ( showFileName
. getBytes ( "gb2312" ) , "ISO8859-1" ) ; response
. reset ( ) ; response
. setCharacterEncoding ( "UTF-8" ) ; response
. setContentType ( "application/x-msdownload" ) ; response
. setHeader ( "Content-Disposition" , "attachment; filename=" + fileName
) ; bos
. write ( data
, 0 , data
. length
) ; } catch ( Exception ex
) { ex
. printStackTrace ( ) ; throw new RuntimeException ( ex
. getMessage ( ) ) ; } finally { try { if ( null != bis
) { bis
. close ( ) ; bis
= null ; } if ( null != bos
) { bos
. close ( ) ; bos
= null ; } if ( null != os
) { os
. close ( ) ; os
= null ; } } catch ( Exception ex
) { throw new RuntimeException ( ex
. getMessage ( ) ) ; } } }
以上都是后臺的代碼
下面是前臺代碼
前臺代碼出現了兩個問題。 1.后臺下載方法走完后,前端頁面瀏覽器一直沒出現下載框。 這是之前的前端下載代碼。
$
. form ( { type
: "GET" , dataType
: 'text' , async : true , url
: '<%=basePath%>importXmlRecord/downloadXmlFileList?ids=' + checktdArr
, success
: function ( respose
) { debugger ; $
. messager
. alert ( '提示' , "下載成功!" , 'success' ) ; } , error
: function ( respose
) { debugger ; $
. messager
. alert ( '提示' , respose
. msg
, 'error' ) ; } } )
在網上查了一下,這樣提交相當于ajax提交,ajax提交后看不到下載框,要用form提交可以出現下載提示框,于是改成下面的方式,就可以在下載文件后看到下載提示框了。
$form
= $ ( '<form method="post"></form>' ) . appendTo ( 'body' ) ; var url
= '<%=basePath%>importXmlRecord/downloadXmlFileList' ; $form
. form ( 'submit' , { url
: url
, dataType
: 'text' , onSubmit
: function ( para
) { para
. ids
= checktdArr
; } , success
: function ( respose
) { $
. messager
. alert ( '提示' , "下載成功!" , 'success' ) ; } , error
: function ( respose
) { $
. messager
. alert ( '提示' , "下載失敗!" , 'error' ) ; } } ) ; $form
. remove ( ) ;
2.谷哥瀏覽器可以正常下載后,去ie瀏覽器上試了一下,ie不能正常下載,而且點擊下載按鈕后總是會出現迅雷下載框提示下載與文件無關的東西,并且后臺報ClientAbortException:java.io.IOException錯誤。去網上查了一下,設置了一下ie瀏覽器的管理下載項,ie瀏覽器就可以正常下載了。 (1)Internet選項,打開 ”管理下載項“。 (2)在工具和擴展中找到了,迅雷下載支持,并且是啟用的,然后禁用它。 (3)重啟 IE之后:進行下載操作,結果一切正常,問題解決: 下面是ie瀏覽器設置的參考網址。 https://www.cnblogs.com/beijixingzhiguang/p/4990984.html
這樣可以正常下載了,但沒有返回到success和error方法中,這個還有待解決。
總結
以上是生活随笔 為你收集整理的spring boot结合FastDFSClient做下载文件注意事项 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。