电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java后臺Controller實現文件下載操作

瀏覽:5日期:2022-08-23 10:12:47

代碼

參數:

1.filePath:文件的絕對路徑(d:downloada.xlsx)

2.fileName(a.xlsx)

3.編碼格式(GBK)

4.response、request不介紹了,從控制器傳入的http對象

代碼片.

//控制器@RequestMapping(UrlConstants.BLACKLIST_TESTDOWNLOAD)public void downLoad(String filePath, HttpServletResponse response, HttpServletRequest request) throws Exception { boolean is = myDownLoad('D:a.xlsx','a.xlsx','GBK',response,request); if(is) System.out.println('成功'); else System.out.println('失敗'); }//下載方法public boolean myDownLoad(String filePath,String fileName, String encoding, HttpServletResponse response, HttpServletRequest request){ File f = new File(filePath); if (!f.exists()) { try {response.sendError(404, 'File not found!'); } catch (IOException e) {e.printStackTrace(); } return false; } String type = fileName.substring(fileName.lastIndexOf('.') + 1); //判斷下載類型 xlsx 或 xls 現在只實現了xlsx、xls兩個類型的文件下載 if (type.equalsIgnoreCase('xlsx') || type.equalsIgnoreCase('xls')){ response.setContentType('application/force-download;charset=UTF-8'); final String userAgent = request.getHeader('USER-AGENT'); try {if (StringUtils.contains(userAgent, 'MSIE') || StringUtils.contains(userAgent, 'Edge')) {// IE瀏覽器 fileName = URLEncoder.encode(fileName, 'UTF8');} else if (StringUtils.contains(userAgent, 'Mozilla')) {// google,火狐瀏覽器 fileName = new String(fileName.getBytes(), 'ISO8859-1');} else { fileName = URLEncoder.encode(fileName, 'UTF8');// 其他瀏覽器}response.setHeader('Content-disposition', 'attachment; filename=' + fileName); } catch (UnsupportedEncodingException e) {logger.error(e.getMessage(), e);return false; } InputStream in = null; OutputStream out = null; try {//獲取要下載的文件輸入流in = new FileInputStream(filePath);int len = 0;//創建數據緩沖區byte[] buffer = new byte[1024];//通過response對象獲取outputStream流out = response.getOutputStream();//將FileInputStream流寫入到buffer緩沖區while((len = in.read(buffer)) > 0) { //使用OutputStream將緩沖區的數據輸出到瀏覽器 out.write(buffer,0,len);}//這一步走完,將文件傳入OutputStream中后,頁面就會彈出下載框 } catch (Exception e) {logger.error(e.getMessage(), e);return false; } finally {try { if (out != null) out.close(); if(in!=null) in.close();} catch (IOException e) { logger.error(e.getMessage(), e);} } return true; }else { logger.error('不支持的下載類型!'); return false; } }

實現效果

1.火狐瀏覽器效果

Java后臺Controller實現文件下載操作

2.chrome效果,自動下載

Java后臺Controller實現文件下載操作

補充知識:文件上傳/下載的幾種寫法(java后端)

文件上傳

1、框架已經幫你獲取到文件對象File了

public boolean uploadFileToLocale(File uploadFile,String filePath) { boolean ret_bl = false; try { InputStream in = new FileInputStream(uploadFile); ret_bl=copyFile(in,filePath); } catch (Exception e) { e.printStackTrace(); } return ret_bl; } public boolean copyFile(InputStream in,String filePath) { boolean ret_bl = false; FileOutputStream os=null; try { os = new FileOutputStream(filePath,false); byte[] b = new byte[8 * 1024]; int length = 0; while ((length = in.read(b)) > 0) {os.write(b, 0, length); } os.close(); in.close(); ret_bl = true; } catch (Exception e) { e.printStackTrace(); }finally{ try { if(os!=null){ os.close(); } if(in!=null){ in.close(); } } catch (IOException e) { e.printStackTrace();}} return ret_bl; }}

2、天了個擼,SB架構師根本就飄在天空沒下來,根本就沒想文件上傳這一回事

public String uploadByHttp(HttpServletRequest request) throws Exception{ String filePath=null; List<String> fileNames = new ArrayList<>(); //創建一個通用的多部分解析器 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //判斷 request 是否有文件上傳,即多部分請求 if(multipartResolver.isMultipart(request)){//轉換成多部分request MultipartHttpServletRequest multiRequest =multipartResolver.resolveMultipart(request); MultiValueMap<String,MultipartFile> multiFileMap = multiRequest.getMultiFileMap();List<MultipartFile> fileSet = new LinkedList<>();for(Entry<String, List<MultipartFile>> temp : multiFileMap.entrySet()){ fileSet = temp.getValue();}String rootPath=System.getProperty('user.dir');for(MultipartFile temp : fileSet){ filePath=rootPath+'/tem/'+temp.getOriginalFilename(); File file = new File(filePath); if(!file.exists()){ file.mkdirs(); } fileNames.add(temp.getOriginalFilename()); temp.transferTo(file);} } }

3、神啊,我正在擼框架,請問HttpServletRequest怎么獲取!!!!

(1)在web.xml中配置一個監聽

<listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener>

(2)HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

文件下載(直接用鏈接下載的不算),這比較簡單

1、本地文件下載(即文件保存在本地)

public void fileDownLoad(HttpServletRequest request,HttpServletResponse response,String fileName,String filePath) throws Exception { response.setCharacterEncoding('UTF-8'); //設置ContentType字段值 response.setContentType('text/html;charset=utf-8'); //通知瀏覽器以下載的方式打開 response.addHeader('Content-type', 'appllication/octet-stream'); response.addHeader('Content-Disposition', 'attachment;filename='+fileName); //通知文件流讀取文件 InputStream in = request.getServletContext().getResourceAsStream(filePath); //獲取response對象的輸出流 OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int len; //循環取出流中的數據 while((len = in.read(buffer)) != -1){ out.write(buffer,0,len); } }

2、遠程文件下載(即網上資源下載,只知道文件URI)

public static void downLoadFromUrl(String urlStr,String fileName,HttpServletResponse response){ try { urlStr=urlStr.replaceAll('', '/'); URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //設置超時間為3秒 conn.setConnectTimeout(3*1000); //防止屏蔽程序抓取而返回403錯誤 conn.setRequestProperty('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)');//得到輸入流 InputStream inputStream = conn.getInputStream(); response.reset();response.setContentType('application/octet-stream; charset=utf-8'); response.setHeader('Content-Disposition', 'attachment; filename=' + new String(fileName.getBytes('GBK'),'ISO8859_1'));//獲取響應報文輸出流對象 //獲取response對象的輸出流 OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int len; //循環取出流中的數據 while((len = in.read(buffer)) != -1){ out.write(buffer,0,len); } } catch (Exception e) { e.printStackTrace(); } }

以上這篇Java后臺Controller實現文件下載操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 睿婕轻钢别墅_钢结构别墅_厂家设计施工报价 | 拉伸膜,PE缠绕膜,打包带,封箱胶带,包装膜厂家-东莞宏展包装 | 海南在线 海南一家 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 特种阀门-调节阀门-高温熔盐阀-镍合金截止阀-钛阀门-高温阀门-高性能蝶阀-蒙乃尔合金阀门-福建捷斯特阀门制造有限公司 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 2025世界机器人大会_IC China_半导体展_集成电路博览会_智能制造展览网 | 皮带机_移动皮带机_大倾角皮带机_皮带机厂家 - 新乡市国盛机械设备有限公司 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 陕西鹏展科技有限公司 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 短信群发平台_群发短信软件_短信营销-讯鸽科技 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 郑州律师咨询-郑州律师事务所_河南锦盾律师事务所 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 破碎机锤头_合金耐磨锤头_郑州宇耐机械工程技术有限公司 | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | 电动葫芦-河北悍象起重机械有限公司 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 预制舱-电力集装箱预制舱-模块化预制舱生产厂家-腾达电器设备 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 |