当前位置: 首页 > news >正文

千海网站建设 小程序大连网站制作网站

千海网站建设 小程序,大连网站制作网站,秦皇岛建设局局官方网站,wordpress后台中文设置作者:fyupeng 技术专栏:☞ https://github.com/fyupeng 项目地址:☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 开发人员往往会经常需要通过浏览器下载文件、图片或者PDF或者缩略图等,这时候我们可以根据…

作者:fyupeng
技术专栏:☞ https://github.com/fyupeng
项目地址:☞ https://github.com/fyupeng/distributed-blog-system-api


留给读者

开发人员往往会经常需要通过浏览器下载文件、图片或者PDF或者缩略图等,这时候我们可以根据自己的需求自定义设置,安全性就可以由自己来把握。

一、介绍

难点主要在于把文件路径当成参数传给后端,后端根据一定的规则处理,将结果写入响应返回给浏览器。

优点

  • 使用懒加载方式,如果本地有,就不从OSS获取,本地没有先从OSS下载到本地,以便频繁下载文件时降低OSS的出入流量。
  • 待补充

二、代码

/*** @Auther: fyp* @Date: 2024/7/26* @Description: 文件预览处理器* @Package: com.gwssi.common.web* @Version: 1.0*/@Controller
public class FilePreviewController {//本地测试可改为自己的路径//private static final String FILE_DIRECTORY = "D:/upload/";private static final String FILE_DIRECTORY = "/data/hqzr/";@ResponseBody@RequestMapping(value = "/file/{fileUrl}/**",  method = RequestMethod.GET)public void getFile(@PathVariable String fileUrl, HttpServletRequest req, HttpServletResponse resp) throws IOException {String path = req.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE).toString();String path2 = req.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE).toString();String args = new AntPathMatcher().extractPathWithinPattern(path2, path);args = args.replace(".do", "");fileUrl = fileUrl + "/" + args;File file = new File(FILE_DIRECTORY + fileUrl);byte[] bytes = null;// 添加安全检查,确保文件确实在预期的目录中if (!file.exists() || !file.isFile() || !file.getCanonicalPath().startsWith(new File(FILE_DIRECTORY).getCanonicalPath())) {// 处理非法访问,例如返回404File parentDir = file.getParentFile();if (!parentDir.exists()) {parentDir.mkdirs(); // 确保文件所在的目录存在}bytes = OssUtil.downloadByBytes(FILE_DIRECTORY + fileUrl);if (null != bytes) {FileOutputStream fos = new FileOutputStream(file);fos.write(bytes);fos.close();resp.reset(); // 非常重要} else {Map<String, String> map = new HashMap<String, String>();map.put("code", "-100");map.put("msg", "文件预览失败");ResponseUtil.returnFrontByJSON(map, resp);}}// 设置适当的响应头(纯下载方式)//resp.setContentType("application/octet-stream; charset=utf-8");//resp.setHeader("Content-Disposition", "attachment;filename=" + file.getName());// 直接预览打开resp.setContentType("image/png"); // 设置返回的文件类型resp.addHeader("Content-Length", String.valueOf(file.length()));  //文件大小// 使用ServletOutputStream将图片数据写入响应try (ServletOutputStream outputStream = resp.getOutputStream();BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file))) {// 从文件服务器获取if (null != bytes) {outputStream.write(bytes);} else {// 从本地获取byte[] buffer = new byte[4096];int bytesRead = -1;// 读取文件内容并写入响应while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}}// 刷新输出流,确保所有数据都被发送outputStream.flush();}}private String getMimeType(File file) {// 这里可以根据文件扩展名返回相应的MIME类型// 这里只是一个简单的示例,实际应用中可能需要更复杂的逻辑String filename = file.getName().toLowerCase();if (filename.endsWith(".png")) {return MediaType.IMAGE_PNG_VALUE;} else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg")) {return MediaType.IMAGE_JPEG_VALUE;}// 添加更多MIME类型判断...return MediaType.APPLICATION_OCTET_STREAM_VALUE; // 默认类型}
}

三、总结

简洁、高效、实用!

http://www.yayakq.cn/news/844707/

相关文章:

  • 长春网站排名优化费用劳务工程信息平台
  • 培训机构网站建设要求兰州做网站 咨询兰州做网站公司
  • 平台建设上线网站中国陕西省住房城乡建设厅官网
  • 温江网站开发电子工程设计网站
  • 做棋牌网站wordpress友情链接图像地址
  • 漯河市住房建设局网站上海做网站 公司 哪家好
  • 自己做网站服务器可以吗北京北京网站建设
  • 网站权重分析邢台网站建设费用
  • 网站建设教程自学网松江品牌网站建设
  • 淄博网站建设网站推广优化常用的网页设计软件
  • 如何查看百度指数网站的seo是什么意思
  • 建设一个视频网站需要多少钱慢慢来 网站建设
  • 四川建设网站塔吊企业信用信息查询公示报告
  • 网站检测中心奉贤庄行网站建设
  • 阿里云网站备案后中盛腾龙建设工程有限公司网站
  • 住房与城乡建设部网站注册中心wordpress的搭建环境搭建
  • 网站和微信对接江苏建设信息电子证书
  • 网站建设公司经营泸州 网站建设
  • 常德网站建设阿里云虚拟主机多个网站
  • php做网站需要注意什么铜陵市网站建设
  • 徐州做网站管理的公司删除后台wordpress新闻
  • 网站开发常用jquery插件邢台网站建设网络优化
  • 厦门网站建设及维护国内购物网站案例分析
  • 网站核验为个人实际是公司广东省有多少个市
  • wordpress本地网站上传网站建设属于哪类工作
  • 张家港网站建设早晨设计在县城做哪个招聘网站比较赚钱
  • 新网站怎么做外链全球设计师知识更新服务平台
  • 摄影网站的意义一些可以做翻译的网站
  • 怎么提高网站排名文化建设的名言警句
  • 传媒网站设计公司wordpress sahifa主题