范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java,SpringBoot,Controller,输出本地图片,实现文件下载功能

  SpringBoot的Controller
  @RequestMapping支持**配置
  当Controller配置为:/res  ,方法配置为:/view/**  ,可匹配:/res/view/xxxxx,/res/view/xxxxx/xxxxx等。
  使用HttpServletResponse中的OutputStream,Controller中方法返回null。
  相关内容
  Filter实现文件下载功能、Servlet下载文件及视频流实现的代码案例
  Controller类 import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod;  import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  @Controller @Api(tags = "文件下载") @RequestMapping("/res") @Slf4j public class CommunalFileDownloadController {      @Resource     private ICommunalFileDownloadService communalFileDownloadService;      @ApiOperation("显示")     @RequestMapping(value = "/view/**", method = {RequestMethod.GET})     public R directView(HttpServletRequest request, HttpServletResponse response) {         log.debug("directView() start");         log.debug("接收参数,param=");         R result = null;         try {             result = communalFileDownloadService.directView(request, response);         } catch (Exception e) {             e.printStackTrace();             result = R.errMsg(e.getMessage());         }         log.debug("响应内容,result=" + result);         log.debug("directView() end");         return result;     }      @ApiOperation("下载")     @RequestMapping(value = "/download/**", method = {RequestMethod.GET})     public R directDownload(HttpServletRequest request, HttpServletResponse response) {         log.debug("directDownload() start");         log.debug("接收参数,param=");         R result = null;         try {             result = communalFileDownloadService.directDownload(request, response);         } catch (Exception e) {             e.printStackTrace();             result = R.errMsg(e.getMessage());         }         log.debug("响应内容,result=" + result);         log.debug("directDownload() end");         return result;     }  }
  Service类 import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.springframework.stereotype.Service;  import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.URLEncoder;  @Service("communalFileDownloadService") @Slf4j public class CommunalFileDownloadServiceImpl implements ICommunalFileDownloadService {      @Override     public R directView(HttpServletRequest request, HttpServletResponse response) throws Exception {         log.debug("directView() start");         // ===================================================================================//         // ===== 文件路径         // ===================================================================================//         String serverStoragePath = SystemThisServer.getServerStoragePath();         String currentUsePrefix = "/res/view";         String uri = request.getRequestURI();         uri = uri.substring(request.getContextPath().length(), uri.length());         uri = uri.substring(currentUsePrefix.length(), uri.length());         String filePath = serverStoragePath + uri;         // ===================================================================================//         // ===== 设置HTTP头         // ===================================================================================//         if (uri.endsWith(".jpg") || uri.endsWith(".jpeg")) {             response.setContentType("image/jpeg");         } else if (uri.endsWith(".png")) {             response.setContentType("image/png");         } else if (uri.endsWith(".webp")) {             response.setContentType("image/webp");         } else if (uri.endsWith(".svg")) {             response.setContentType("image/svg+xml");         } else {             response.setContentType("application/octet-stream");         }         // ===================================================================================//         // ===== 输出文件         // ===================================================================================//         ServletOutputStream output = response.getOutputStream();         InputStream inputStream = new FileInputStream(filePath);         IOUtils.copy(inputStream, output);         // ===================================================================================//         // ===== The end         // ===================================================================================//         log.debug("directView() end");         return null;     }      @Override     public R directDownload(HttpServletRequest request, HttpServletResponse response) throws Exception {         log.debug("directDownload() start");         // ===================================================================================//         // ===== 文件路径         // ===================================================================================//         String serverStoragePath = SystemThisServer.getServerStoragePath();         String currentUsePrefix = "/res/download";         String uri = request.getRequestURI();         uri = uri.substring(request.getContextPath().length(), uri.length());         uri = uri.substring(currentUsePrefix.length(), uri.length());         String filePath = serverStoragePath + uri;         // ===================================================================================//         // ===== 设置HTTP头         // ===================================================================================//         File downloadFile = new File(filePath);         // 制定下载格式和下载文件大小         response.setContentType("application/octet-stream");         String downloadName = URLEncoder.encode(downloadFile.getName(), "UTF-8");         response.setHeader("Content_Length", String.valueOf(downloadFile.length()));         response.setHeader("Content-Disposition", "attachment; filename=" + downloadName);         // ===================================================================================//         // ===== 输出文件         // ===================================================================================//         ServletOutputStream output = response.getOutputStream();         InputStream inputStream = new FileInputStream(filePath);         IOUtils.copy(inputStream, output);         // ===================================================================================//         // ===== The end         // ===================================================================================//         log.debug("directDownload() end");         return null;     }  }

多氟多一周签订40亿销售长单受益产品涨价前三季净利增53倍长江商报消息新能源汽车的蓬勃兴起,带活了锂电池,也让锂盐产品六氟磷酸锂一货难求。主营六氟磷酸锂产品的A股公司多氟多(002407。SZ)经营异常红火,公司产品供不应求。今年11月1红米产品总监被发配河南,还是准备升迁呢?对米粉来说,小米是不缺新闻话题,本来人家红米产品经理王腾的一次正常的职业调动,被网友视为是发配,一度上了热搜。说句实话,小米的手机换了好多部了,都是红米系列的,没有其他原因,就是便前10月国内市场手机出货量近3亿部近九成为国产品牌来源人民网原创稿人民网北京11月24日电(记者乔雪峰)近日,中国信通院发布了2021年10月国内手机市场运行分析报告,2021年110月,国内市场手机总体出货量累计2。82亿部,其为什么有的网站连wifi打不开,开流量才能打开?这种情况确实是存在的,一般访问国内的网站区别不大,多数出现在访问境外网站!影响的因素比较多,主要的有这么几个1。线路问题我们家里的WIFI都是由家庭带宽通过无线路由器转换而来,家用现在净水器市场如何?净水器营销又如何?安吉尔,全国苏宁国美都有的品牌,27年专注净饮水,专业大品牌,品质服务有有保障,一份安心,一份保障净水器市场还是可以的,市场品牌也不少,现在人们对健康环保也越来越重视,但是做净水器SAAS与IAAS云渲染农场怎么选择?区别在哪?渲染时,最重要的是需要的时间和硬件可用的。此渲染过程需要大量计算能力才能快速创建图像或视频。GPU(图形处理单元)是图形的计算能力,越来越多地用于渲染CAD模型。GPU中有特殊的处京东一共有多少仓库?根据京东集团2018年第一季度业绩报告,截止2018年3月31日,京东集团在全国一共有515个仓库。总面积约1090万平方米。平均每个仓库的面积为2。12万平方米。其中,自动化程度ASML又有新动作!这次是想将先进光刻机暗渡陈仓华为无法被自有出货是因为美方不仅禁止台积电继续为华为代工芯片,还禁止ASML向我国出售具有先进工艺的EUV光刻机。这就导致了国内的芯片制造企业无法生产出符合华为要求的芯片。而华为的财政部印发国家科技成果转化引导基金管理暂行办法来源人民网原创稿人民网北京11月23日电(记者王震)据财政部网站消息,为加快实施创新驱动发展战略,加速推动科技成果转化与应用,近日,财政部修订并印发国家科技成果转化引导基金管理暂行iPhone13全系不再支持电信2G3G网络业内人士几乎没有影响iPhone13系列9月份正式发布,如今已经有无数消费者用上了新机,但是今天却有一则非常离奇的消息上了热搜。有近日新报道称,目前iPhone13系列已不再支持中国电信2G3G网络,探前沿算法解应用难题来源人民网人民日报吕志鹏教授(中)及其团队成员。资料图片核心阅读不久前,在计算机辅助设计国际会议上,华中科技大学计算机学院吕志鹏教授团队摘得电子设计自动化布局布线算法竞赛全球冠军。
头条百粉后的思考打卡美好生活进入头条创作二月有余,总结一下,一波三折,有喜有忧。第一次收获5万以上的视频播放量,收到头条第一个10元创作收益,当喜悦的心情未曾平复时,接着带来噩梦开始,收到违反视频完美解决右击桌面刷新卡顿的问题平时使用WIN系统的时候,你是否习惯性,右击桌面,点刷新,一天不点几次,就浑身不舒服,如果突然发现你的右击刷新,不灵光了,总在那里转圈,想刷新,总要等那几秒,浑身不舒服。今天我就带广州地铁交通最便利的大学广东女子职业技术学院我在大学等你高校种草大会广东女子职业技术学院由广东省妇联主办经广东省人民政府批准成立的公办女子高等学府,学校为广东省级示范性高职院校,是广东省职业院校双师型教师培训基地全国家庭教育今天来教你一招拯救你越来越臃肿的系统系统用久了,C盘的空间越来越少,系统越来越慢今天教大家怎么清理电脑,提升电脑速度,还你C盘空间,当电脑的C盘空间超过80,系统就会变成卡顿,因此我们还是要注意清下C盘,对系统进行一作为牛B的大神,你不能不知的网络端口平时工作上,网络端口的知道必不可以,知道常用网络端口是一个网络运维必备的知识点,很多时候,需要通过排查端口,才能发现问题今天我来整理下,日常中常用的网络端口,记得收藏哦。FTP用到今天教大家怎么配置http服务器的apache平台虽然nginx很火,很多人喜欢用nginx,但是还是有些会用apache来放网站。今天教大家怎么配置的apache平台。1下载APACHE源代码wgethttpftp。cuhk。e为了庆祝基友退役归来,一男子竟换上女装欢迎?哈哈哈哈好羡慕为了庆祝基友退役归来,一男子竟换上女装欢迎?哈哈哈哈哈好羡慕!大家都知道,当兵是非常辛苦的,而且还要离开家乡服兵役好多年,亲人朋友也都不在身边,不过,这份辛苦是非常值得的,因为每一RX6600跳票!将比RX6600XT更晚上市这两天关于AMD新显卡RX6600以及RX6600XT的消息越来越多,基本只差官方临门一脚正式发布,但就在今天下午国外媒体突然发出一项报告,AMD的两款新显卡将不会同步发售,而且跳动圈圈铁耳机都是啥玩意?我们做了一期相关的视频,方便看视频的欢迎直接到我们主页看视频哈!感谢支持评论!动圈耳机,动铁耳机是按照声音驱动方式来分的。声音是一种波,声波的产生离不开振动,动圈动铁耳机的主要区别HiFi入门耳机体验之兴戈EM2R最近工作上面的事情比较多,视频也一直没有更新,非常抱歉!有网友让我帮忙听一下新EM2R怎么样,听了将近一周,顺便写一篇我的感受。其实我对兴戈的印象,始于铜雀,大概在2017吧。铜雀降噪耳机怎么选?什么样的降噪效果最好?我们有做一个视频,如果不想看图文的可以到我们主页看视频哈在生活中,您是否感受到很多讨厌的噪声?戴着耳机,就可以免受噪声的干扰吗?为了在嘈杂的环境中还你清净,耳机都做了哪些特殊的降噪