Java 通过网络流转发文件到浏览器
2023-02-26 12:26:48 时间
public void downloadVideoById(HttpServletRequest request, HttpServletResponse response) throws Exception { logger.info("下载请求start>>"); String fileName = request.getParameter("fileName");//文件名 String filePath = request.getParameter("filePath");//文件名 try { if (StringUtil.isEmpty(fileName) || StringUtil.isEmpty(filePath)) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); response.getWriter().print("参数错误,请联系管理员!"); response.flushBuffer(); return; } URL pathUrl = new URL(filePath); HttpURLConnection urlcon = (HttpURLConnection) pathUrl.openConnection(); if(urlcon.getResponseCode()>=400){ response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); response.getWriter().print("文件不存在,请联系管理员!"); response.flushBuffer(); return; } //获取输入流对象(用于读文件) 网络流 InputStream inputStream = new URL(filePath).openStream(); //本地流文件 // FileInputStream fis = new FileInputStream(new File(filePath)); //动态设置响应类型,根据前台传递文件类型设置响应类型 response.setContentType("application/" + fileName.substring(fileName.lastIndexOf(".")+1)); //设置响应头,attachment表示以附件的形式下载,inline表示在线打开 response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));//下载时浏览器显示的名称 //获取输出流对象(用于写文件) ServletOutputStream os = response.getOutputStream(); //下载文件,使用spring框架中的FileCopyUtils工具 FileCopyUtils.copy(inputStream, os); } catch (Exception e) { logger.error("下载失败 start >>",e); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=UTF-8"); response.getWriter().print("下载失败,请联系管理员!"); response.flushBuffer(); } }
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- 几种主流的分布式定时任务,你知道哪些?
- Spring Boot独立运行的jar包是如何工作的
- 你可能需要的React开发小技巧!
- 让人迷糊的 Socket UDP 连接问题
- 聊聊Java中并发编程的十个坑
- Spring事务监听,为什么会出现事务失效?
- 死磕到底JVM,花了5年时间,对加载机制有了不一样的理解
- 在Java中创建随机数的不同方法
- 面试问烂的Spring AOP,再搞不懂没脸回家过年了……
- 太强了!这么设计中间件完美解决了百万并发的问题!
- Spring Cloud 2022.0.0正式发布:OpenFeign稳得很&全面迈向GraalVM
- Java三大版本&JDK、JRE、JVM
- Golang transaction 事务使用的正确姿势
- Java Record 的一些思考 - 序列化相关
- 妙啊!巧用 SSH 突破限制穿透内网
- 90%的Java开发人员都会犯的五个错误
- C++的lambda是函数还是对象?
- 实战干货:基于Redis6.0 部署迷你版本消息队列
- Chrome 99新特性:@layers 规则浅析
- 展开操作符:一家人就这么被拆散了