CGB2104-Day17
1. 文件上传实现
1.1 编辑properties文件
1.2 动态为属性赋值
说明: 文件上传的完整代码 注意磁盘地址/URL地址的拼接 问题
@Service @PropertySource("classpath:/image.properties") //动态导入pro配置文件 public class FileServiceImpl implements FileService{//最优做法:应该使用配置文件动态的属性赋值!!!!@Value("${file.localDirPath}")private String localDirPath; // = "D:/images";@Value("${file.preURLPath}")private String preURLPath; // = "http://image.jt.com";/*** 1.验证上传的文件是图片! jpg|png|gif 采用正则的方式校验* 2.防止恶意程序攻击, 验证图片是否有宽度和高度.* 3.文件分目录存储 例如: /2021/11/11* 例如2: hash码 8位hash xx/xx/xx/xx* 数据hahs时 特征:因为是算法 可能造成数据分配不均!!!* 4.防止文件重名,修改文件名称 UUID* @param file* @return*/@Overridepublic ImageVO upload(MultipartFile file) {//1.校验图片类型是否正确 正则表达式 a.jpg//1.1 获取文件名称String fileName = file.getOriginalFilename();//1.3将名称全部小写fileName = fileName.toLowerCase();//1.2 正则校验 bug!!!!if(!fileName.matches("^.+\\.(jpg|png|gif)$")){//如果文件不是图片 则返回nullreturn null;}//2.判断是否为恶意程序//2.1 通过图片对象 获取宽度和高度try {BufferedImage bufferedImage = ImageIO.read(file.getInputStream());int height = bufferedImage.getHeight();int width = bufferedImage.getWidth();if(height==0 || width==0){return null;}//3实现分目录存储//3.1 按照时间将分配目录 /yyyy/MM/dd/String dateDirPath = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());//3.2 "D:/images/yyyy/MM/dd/String localDir = localDirPath + dateDirPath;File dirFile = new File(localDir);if(!dirFile.exists()){//如果目录不存在,则创建目录dirFile.mkdirs();}//4. 防止文件重名 生成UUID.文件类型String uuid = UUID.randomUUID().toString().replace("-","");int index = fileName.lastIndexOf(".");//获取后缀 .jpg abc.jpgString fileType = fileName.substring(index); //从给定的位置开始 向后截取数据String realFileName = uuid + fileType;//5.实现文件上传// 5.1 拼接文件全路径 目录/文件名称String localFilePath = localDir + realFileName;// 5.2 完成文件上传file.transferTo(new File(localFilePath));/**封装返回值.* 不带磁盘的本地存储路径 虚拟动态目录* D:\images\2021\07\13\8b7b3ef3c88845a6876371b4815244ca.jpg*/String virtualPath = dateDirPath + realFileName;//动态拼接网络访问地址//图片访问网络地址: http://image.jt.com(域名)/2021/07/13/85a.jpg(动态路径)//真实的磁盘地址: D:/images/2021/07/13/85a.jpgString urlPath = preURLPath + virtualPath;ImageVO imageVO = new ImageVO(virtualPath,urlPath,realFileName);System.out.println(imageVO);return imageVO;} catch (IOException e) {e.printStackTrace();//终止程序return null;}}}
1.3 图片删除
1.3.1 业务接口文档
1.3.2 检查VUE.js
1.3.3 编辑FileController
/**
实现文件删除操作
URL地址: /file/deleteFile参数: virtualPath 虚拟路径
返回值: SysResult对象/
@DeleteMapping(“/deleteFile”)
public SysResult deleteFile(String virtualPath){fileService.deleteFile(virtualPath);
return SysResult.success();
}
1.3.4 编辑FileService
2. Nginx
2.1 反向代理机制
2.1.1 反向代理介绍
特点:
1. 反向代理服务器 介于用户与目标服务器之间 (3个组成部分)
2. 用户以为反向代理服务器就是目标服务器.
3. 用户不清楚真是的目标服务器地址.
2.1.2 反向代理机制
2.2 正向代理机制
2.2.1 正向代理
2.2.2 正向代理解析
2.2 Nginx介绍
2.3 Nginx安装
2.3.1 Nginx下载
注意事项: nginx底层开发由C语言完成的. 所以要求不要有中文目录/空格/特殊字符 (程序员操守)
2.3.2 Nginx解压
nginx启动时会占用80端口.
单击运行访问: localhost:80 效果如图
2.4 Nginx关于进程项说明
2.5 nginx命令
说明: nginx命令执行需要在nginx.exe的根目录中完成
- 启动nginx start nginx 则负责启动nginx服务器,至于报错不提示
- 重启nginx nginx -s reload 检查程序是否正确,有报错提示.
- 停止nginx nginx -s stop
2.6 反向代理入门案例
2.6.1 nginx配置文件位置
2.6.2 编辑nginx配置文件
2.7 业务说明
2.7.1 图片代理说明
2.7.2 修改nginx配置项
2.7.3 HOSTS文件
图片回显的工作原理
说明: hosts文件修改提示权限不足 按照 问题集中的描述 获取权限.
提示: 127.0.0.1 image.jt.com 重启nginx之后 重新上传图片检查是否正常回显
CGB2104-Day17相关推荐
- Java基础day17
Java基础day17 Java基础day17-File&递归&字节流 1.File类 1.1File类概述和构造方法 1.2File类创建功能 1.3File类判断和获取功能 1.4 ...
- day17(JDBC入门jdbcUtils工具介绍)
day17 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中url ...
- LeetCode算法入门- Remove Nth Node From End of List -day17
LeetCode算法入门- Remove Nth Node From End of List -day17 题目解释: Given a linked list, remove the n-th nod ...
- 句句真研—每日长难句打卡Day17
句句真研-每日长难句打卡Day17 补九月三号 参考译文:他们发现,(董事)突然离职后,其所在公司随后需要重申盈利的可能性增加了近20%.
- Python菜鸟入门:day17编程学习
写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...
- day17【前台】支付案例
day17[前台]支付案例 1.支付宝开放平台 1.1.首页网址 首页网址 https://open.alipay.com/ 1.2.文档中心 看这些 1.3.创建应用 开发时暂时使用沙箱环境 1.4 ...
- 21天Jmeter打卡Day17 后置处理器_JSON_正则表达式_边界提取器_完成删除场景模拟测试
1天Jmeter打卡Day17 后置处理器_JSON_正则表达式_边界提取器_完成删除场景模拟测试 https://www.jianshu.com/p/5c1d64e5d724 Json提取器见Day ...
- JAVA萌新学习day17.18天 数据库MySQL
JAVA萌新学习day17.18天 数据库MySQL基本操作 MySQLDemo // name age address 小明 18 大连 小明 18 大连 小明 18 大连/*** 1.数据库 -& ...
- Day17(集合)学习记录(HashSet集合 HashMap集合)
大纲: Day17(集合)学习目标 [学习目标]理解.了解.应用.记忆 通过今天的学习,参训学员能够:(解释的时候说出二级目标的掌握程度) [应用]HashSet集合 [应用]能够独立阐述Set体系的 ...
- day17 面向对象基础
day17 面向对象基础 一.编程思想 1.编程思想:程序员在面对一个问题的时候首先想到的解决这个问题的想法 2.三种编程思想: 面向过程编程(穷人思想) - 会基本语法和逻辑 函数式编程(小资思想) ...
最新文章
- nodejs发送数据到html显示_用php生成HTML文件的类
- 使用js的indexOf,lastIndexOf,slice三函数轻易得到url的服务器,路径和页名
- 西门子标准报文1常用_基于Snap7使用C#编程访问西门子PLC系列教程(2)-S7协议
- kaggle數據集下載到colab上并且解压
- 蓝桥杯vip答案java_Java实现 蓝桥杯VIP 算法训练 麦森数
- JS小游戏-极速快跑
- java文件流的操作
- 如何在Mac上合并日历
- 1. Composer 简介
- 服务器sni协议,SNI协议分析
- 全球破解组织网址大全
- php计数器归零,php计数器lt;?/*-一个简单的计数器*/functio 爱问知识人
- python求列表list平均值的方法
- 2021宝德数字产业生态大会 | 计算驱动未来
- 《吐血整理》顶级程序员工具集
- 哪几款蓝牙耳机音质最好?音质好的蓝牙耳机测评
- 新人该如何学习做产品经理
- python opencv学习笔记之数米粒,并返回每一个米粒的位置面积及总个数平均面积
- BI自动化之Python自动发报告(查询数据库生成报表和图片嵌入邮件)
- mac下镜像飞速安装Homebrew教程