2021-5-21---图片的 读取 反向代理 正向代理

反向代理

反向代理就是 在用户和目标服务器之间 , 用户通过访问反向代理 , 然后反向代理进行访问目标服务器 , 

用户其实无需知道目标服务器的地址 , 也无需在用户端做任何的设定. 反向代理主要作用是保护了目标服务器

正向代理

正向代理就是在用户和客户端和原始服务器(家里平时的路由器)之间 , 客户端向代理发sing一个请求,当用户发请求时明确告知了代理的真实的请求地址, 正向代理服务器保护了客户的信息 , 服务器无需知道客户是谁 ;

正向代理和反向代理机制的所有的代理机制的原理如下图

一般情况下正向代理和饭不想代理都会使用 正向代理进行实现网路通讯 , 反向代理进行服务器的数据的获取;

nginx   (其他的错误可以查看闪耀的太阳)

 nginx 在做每一次功能前都必须需要重启, 否则会不生效;

nginx是一个高性能的http和反向代理的服务器 ,nginx的并发的效率为5万/秒,实际的能力为3万/秒 

主进程 : 主要提供反向代理服务

守护进程 : 防止进程意外关闭

启动nginx :  satart nginx

重启nginx:  nginx  -s  reload

停止nginx: nginx  -s  stop

在启动nginx 的时候必须先启动nginx, 在进行重启,这两步都不能少且顺序也不能改变

nginx的下载

nginx的默认占有端口为80;

nginx启动时要使用命令进行启动

反向代理的配置在conft的文件中进行配置

编辑 此内容就可以在网站输入  域名 : 端口号  就可以进行浏览

sd

将数据 转换成josn串

文件如果都放在一个文件夹之后那么在读取的时候会比较慢那么这时候就要放到下一级文件夹进行存储  可以以时间进行分割

图片的回显

需要访问nginx的服务器  ,  同时需要配置hosts的文件和conft的文件 , 实现域名与IP地址的映射 ;

配置hosts 的文件

集群的配置`有3种  第一种就是均衡层略局势8091和8092 被访问的次数都差不多  ,  第二种就是权重就是weight的值越大出现的次数就越多 ,

@Service
@PropertySource("classpath:/properties/image.properties")
public class FileServiceImpl implements FileService{

    //为属性动态赋值 注解@Value
    @Value("${image.localPathDir}")
    private String localPathDir;        // = "D:/JT_IMAGE";
    @Value("${image.localUrlPath}")
    private String localUrlPath;        // = "http://image.jt.com";


    //1.参数  ~~~已知条件
    //2.干什么 ~~~ 实现文件上传
    //3.返回值: void ImageVO 有效返回

    /**
     * 文件上传案例实现
     * 1.如何保证前端是上传的数据是有效的!!
     *      1.1 校验文件的名称检查是否为图片
     *      1.2 校验是否为恶意程序.
     * @param file
     * @return
     */
    @Override
    public ImageVO upload(MultipartFile file) throws IOException {
        //1.1校验是否为图片类型  abc.jpg ABC.JPG 文件大小写
        String fileName = file.getOriginalFilename();
        //将所有的文件名称转化为小写
        fileName = fileName.toLowerCase();
        if(!fileName.matches("^.+\\.(jpg|png|gif)$")){
            return null;
        }
        //1.2 校验图片类型是否为木马
        try {
            BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
            int width = bufferedImage.getWidth();
            int height = bufferedImage.getHeight();
            if(width == 0 || height == 0 ){
                return null;
            }
        }catch (Exception e){
            return null;
        }

        //2. 目录结构
        //2.1 实现分目录存储...  可以以时间维度进行分隔 /yyyy/MM/dd/
        String datePath =
                new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
        //2.2 进行目录的拼接  "D:/JT_IMAGE/2021/11/11";
        String localDir = localPathDir + datePath;
        //2.3 需要创建目录
        File dirFile = new File(localDir);
        if(!dirFile.exists()){
            dirFile.mkdirs();
        }

        //3.文件名称重复  采用UUID防止文件重名 uuid.jpg
        String uuid = UUID.randomUUID().toString()
                .replace("-", "");
        //fileName = abc.jpg
        String fileType =
                fileName.substring(fileName.lastIndexOf("."));
        String realFileName = uuid + fileType;

        //c:jt_image/2021/11/11/uuid.jpg
        String filePathAll = localDir + realFileName;
        //实现文件上传
        File realFile = new File(filePathAll);
        file.transferTo(realFile);

        //封装ImageVO对象  //2021/11/11/uuid.jpg 图片路径
        String virtualPath = datePath + realFileName;
        //封装虚拟URl地址  http://image.jt.com/2021/11/11/uuid.jpg
        String urlPath = localUrlPath + virtualPath;
        return new ImageVO(virtualPath,urlPath,realFileName);
    }

    //如何实现文件删除??  virtualPath: 2021/11/11/uuid.jpg
    @Override
    public void fileRemove(String virtualPath) {
        String filePath = localPathDir + virtualPath;
        File file = new File(filePath);
        //删除文件
        file.delete();
    }
}

第三种就是iphash就是加入ip_hash就会一直不变的访问某一个服务器直到这个服务器坏掉会自动访问另外正常的服务器

在java中格式化时间的就是将时间当做一个类进行处理(可以有年,月,日,时,分,秒)


@RestController
@CrossOrigin
@RequestMapping("/file")
public class FileController {

    @Autowired
    private FileService fileService;

    @PostMapping("/upload")
    public SysResult upload(MultipartFile file) throws IOException {

        ImageVO imageVO = fileService.upload(file);
        if(imageVO == null){
            return SysResult.fail();
        }
        return SysResult.success(imageVO);
    }

    //实现文件的删除功能
    //URL: /file/deleteFile
    @DeleteMapping("/deleteFile")
    public SysResult fileRemove(String virtualPath){

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

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值