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


  1. /**
  2. 实现文件删除操作
    URL地址: /file/deleteFile
  3. 参数: virtualPath 虚拟路径
    返回值: SysResult对象
  4. /
    @DeleteMapping(“/deleteFile”)
    public SysResult deleteFile(String virtualPath){

    fileService.deleteFile(virtualPath);
    return SysResult.success();
    }

1.3.4 编辑FileService

  1. //删除文件 1.准备文件全路径 2.执行删除操作
    @Override
    public void deleteFile(String virtualPath) {
    // D:/images/yyyy/MM/dd/uuid.jpg
    String path = localDirPath + virtualPath;
    File file = new File(path);
    //实现文件删除操作
    file.delete();
    }

2. Nginx

2.1 反向代理机制

2.1.1 反向代理介绍

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率.

特点:
1. 反向代理服务器 介于用户与目标服务器之间 (3个组成部分)
2. 用户以为反向代理服务器就是目标服务器.
3. 用户不清楚真是的目标服务器地址.

2.1.2 反向代理机制


步骤:
核心知识: 用户出于某种原因 无法直接访问服务器.所以采用代理机制
1. 用户向代理服务器发送请求,(以为代理服务器就是真实目标服务器)
2. 代理服务器接收请求时,根据自己的映射文件,重新发起新的请求 访问真实的目标服务器.
3. 根据映射路径,查找真实的服务器资源.
4. 获取资源返回给代理服务器.
5. 代理服务器将资源交换给用户.

2.2 正向代理机制

2.2.1 正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
特点:
1.正向代理介于用户与目标服务器之间.
2.用户非常清楚的知道自己访问的远程资源到底是谁.
3.一般采用正向代理时 都是为了实现网络的通信.

2.2.2 正向代理解析

2.2 Nginx介绍

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

总结: Nginx是一个主流的 反向代理服务器/负载均衡服务器.(F5)
特点:
1.占用内存少 启动一个服务运行内存不超过2M 开发语言: C语言
2.并发能力强 官方测试数据 5万/秒并发能力 实测: 2-3万/秒
科普: 单台tomcat服务器并发能力 220/秒 JVM调优 增大JVM运行内存空间
配合服务器监控.根据当前硬件设备进行优化. 经过JVM调优之后的tomcat服务器 可以达到 1000/秒

2.3 Nginx安装

2.3.1 Nginx下载

注意事项: nginx底层开发由C语言完成的. 所以要求不要有中文目录/空格/特殊字符 (程序员操守)

2.3.2 Nginx解压

nginx启动时会占用80端口.

单击运行访问: localhost:80 效果如图

2.4 Nginx关于进程项说明

注意事项: 每次Nginx启动都会启动2个进程,如果重复启动则进程项会有多个.但是其它的进程不起作用 容易混淆.

关于进程项说明:
1. 主进程: 主要提供反向代理服务 内存占用大的
2. 守护进程: 防止主进程意外关闭的. 内存占用小的
先关闭守护再关闭主进程.

2.5 nginx命令

说明: nginx命令执行需要在nginx.exe的根目录中完成

  1. 启动nginx start nginx 则负责启动nginx服务器,至于报错不提示
  2. 重启nginx nginx -s reload 检查程序是否正确,有报错提示.
  3. 停止nginx nginx -s stop

2.6 反向代理入门案例

2.6.1 nginx配置文件位置

2.6.2 编辑nginx配置文件

  1. #每个反向代理服务都是一个server
    server {
    #监听端口号 一般默认都是80
    listen 80;
    #拦截用户访问的路径
    server_name localhost;
    #反向代理配置 / 拦截所有请求
    location / {
    #root关键字 代表的是一个目录
    root html;
    #index关键字 默认的欢迎页面
    index index.html index.htm;
    }
    }

2.7 业务说明

2.7.1 图片代理说明

1.用户URL地址 http://image.jt.com/2021/07/13/2baf5a45be974e8897130a8ea89e1178.jpg
2.文件磁盘地址 D:/images/2021/07/13/2baf5a45be974e8897130a8ea89e1178.jpg
原因: 远程URL地址与本地的磁盘地址不能映射.
解决方案: 用户访问http://image.jt.com 应该到D:/images

2.7.2 修改nginx配置项

说明: 修改之后需要重启nginx服务器.

  1. #配置图片反向代理 1.注意位置 2.注意语法
    server {
    listen 80;
    server_name image.jt.com;
    location / {
    root D:/images;
    }
    }

2.7.3 HOSTS文件

作用: 主要在本机实现 域名与IP的映射.
文件位置:

图片回显的工作原理

说明: hosts文件修改提示权限不足 按照 问题集中的描述 获取权限.
提示: 127.0.0.1 image.jt.com 重启nginx之后 重新上传图片检查是否正常回显

hosts配置/nignx.conf配置参见码云信息:

CGB2104-Day17相关推荐

  1. Java基础day17

    Java基础day17 Java基础day17-File&递归&字节流 1.File类 1.1File类概述和构造方法 1.2File类创建功能 1.3File类判断和获取功能 1.4 ...

  2. day17(JDBC入门jdbcUtils工具介绍)

    day17 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中url ...

  3. 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 ...

  4. 句句真研—每日长难句打卡Day17

    句句真研-每日长难句打卡Day17 补九月三号 参考译文:他们发现,(董事)突然离职后,其所在公司随后需要重申盈利的可能性增加了近20%.

  5. Python菜鸟入门:day17编程学习

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  6. day17【前台】支付案例

    day17[前台]支付案例 1.支付宝开放平台 1.1.首页网址 首页网址 https://open.alipay.com/ 1.2.文档中心 看这些 1.3.创建应用 开发时暂时使用沙箱环境 1.4 ...

  7. 21天Jmeter打卡Day17 后置处理器_JSON_正则表达式_边界提取器_完成删除场景模拟测试

    1天Jmeter打卡Day17 后置处理器_JSON_正则表达式_边界提取器_完成删除场景模拟测试 https://www.jianshu.com/p/5c1d64e5d724 Json提取器见Day ...

  8. JAVA萌新学习day17.18天 数据库MySQL

    JAVA萌新学习day17.18天 数据库MySQL基本操作 MySQLDemo // name age address 小明 18 大连 小明 18 大连 小明 18 大连/*** 1.数据库 -& ...

  9. Day17(集合)学习记录(HashSet集合 HashMap集合)

    大纲: Day17(集合)学习目标 [学习目标]理解.了解.应用.记忆 通过今天的学习,参训学员能够:(解释的时候说出二级目标的掌握程度) [应用]HashSet集合 [应用]能够独立阐述Set体系的 ...

  10. day17 面向对象基础

    day17 面向对象基础 一.编程思想 1.编程思想:程序员在面对一个问题的时候首先想到的解决这个问题的想法 2.三种编程思想: 面向过程编程(穷人思想) - 会基本语法和逻辑 函数式编程(小资思想) ...

最新文章

  1. nodejs发送数据到html显示_用php生成HTML文件的类
  2. 使用js的indexOf,lastIndexOf,slice三函数轻易得到url的服务器,路径和页名
  3. 西门子标准报文1常用_基于Snap7使用C#编程访问西门子PLC系列教程(2)-S7协议
  4. kaggle數據集下載到colab上并且解压
  5. 蓝桥杯vip答案java_Java实现 蓝桥杯VIP 算法训练 麦森数
  6. JS小游戏-极速快跑
  7. java文件流的操作
  8. 如何在Mac上合并日历
  9. 1. Composer 简介
  10. 服务器sni协议,SNI协议分析
  11. 全球破解组织网址大全
  12. php计数器归零,php计数器lt;?/*-一个简单的计数器*/functio 爱问知识人
  13. python求列表list平均值的方法
  14. 2021宝德数字产业生态大会 | 计算驱动未来
  15. 《吐血整理》顶级程序员工具集
  16. 哪几款蓝牙耳机音质最好?音质好的蓝牙耳机测评
  17. 新人该如何学习做产品经理
  18. python opencv学习笔记之数米粒,并返回每一个米粒的位置面积及总个数平均面积
  19. BI自动化之Python自动发报告(查询数据库生成报表和图片嵌入邮件)
  20. mac下镜像飞速安装Homebrew教程

热门文章

  1. 使用.net编写的 短连接(短网址)服务
  2. ARM920T内存管理单元MMU
  3. VS2015 更换序列号
  4. asp.netc#验证AD域账户的用户名和密码
  5. 小米手机扩容教程_手机内部存储空间扩容方法
  6. 查看搜狗浏览器插件的本地安装位置
  7. MACOS 打开 Pycharm2020 闪退解决方法
  8. App Store 类别定义
  9. 简述网桥的特点_网桥的工作原理和特点是什么?
  10. 【noip2005】篝火晚会