日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring boot结合FastDFSClient做下载文件注意事项

發布時間:2024/1/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring boot结合FastDFSClient做下载文件注意事项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

spring boot結合FastDFSClient做下載文件注意事項

1.后臺下載方法走完后,前端頁面瀏覽器一直沒出現下載框。
2.ie瀏覽器兼容問題。

下面的FastDFSClient類依賴fdfsclient-jar-with-dependencies.jar包
下面是后臺代碼。

// An highlighted block /*** 下載* @return* @throws Exception */@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方法。

// An highlighted block /*** 文件下載* @param response* @param downloadFile*/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");// 不同類型的文件對應不同的MIME類型 // 重點突出// inline在瀏覽器中直接顯示,不提示用戶下載// attachment彈出對話框,提示用戶進行下載保存本地// 默認為inline方式response.setHeader("Content-Disposition", "attachment; filename="+fileName); // 重點突出bos.write(data, 0, data.length);// 將文件發送到客戶端} catch (Exception ex) {ex.printStackTrace();throw new RuntimeException(ex.getMessage());} finally {// 特別重要// 1. 進行關閉是為了釋放資源// 2. 進行關閉會自動執行flush方法清空緩沖區內容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.后臺下載方法走完后,前端頁面瀏覽器一直沒出現下載框。
這是之前的前端下載代碼。

// An highlighted block $.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提交可以出現下載提示框,于是改成下面的方式,就可以在下載文件后看到下載提示框了。

// An highlighted block $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做下载文件注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。