分布式文件存储与数据缓存(一)| FastDFS

目录

  • 分布式文件系统
  • FastDFS概述_简介
    • FastDFS特性:
    • 分布式文件服务提供商
  • FastDFS概述_核心概念
    • tracker
    • storage
    • client
    • group
  • FastDFS概述_上传机制
    • 内部机制如下
  • FastDFS概述_下载机制
    • 内部机制如下
  • FastDFS环境搭建_Linux
    • 下载安装gcc
    • 下载安装FastDFS
    • 下载安装FastDFS依赖
    • 解压缩依赖tar包
    • 编译并安装libfastcommon
    • 编译并安装FastDFS
    • 进入etc目录下复制配置文件
    • 创建tracker服务
      • 创建tracker目录
      • 修改配置文件
      • 启动tracker服务
      • 检查tracker服务
    • 创建storage服务
      • 创建storage目录
      • 修改配置文件
      • 启动storage服务
      • 查看storage服务
    • 修改Client配置文件
    • 创建日志目录
  • FastDFS指令
    • 上传指令
      • 指令参数
      • 指令使用
    • 下载指令
      • 指令参数
      • 指令使用
    • 查看文件信息指令
      • 指令参数
      • 指令使用
    • 删除指令
      • 指令参数
      • 指令使用
  • SpringBoot操作FastDFS
    • 导入FastDFS依赖jar
    • 配置springboot的application.yml配置文件
    • 上传和下载文件操作
  • 前端文件上传到fastdfs
    • 引入Thymeleaf视图解析器
    • 编写index页面 引入wangEditor富文本编辑器
    • 编写Controller接口
  • FastDFS集成Nginx
    • FastDFS集成Nginx的2个原因
      • 为分布式文件系统提供Http服务支持
      • 解决复制延迟问题
  • FastDFS集成Nginx_环境搭建
    • 下载Fastdfs的Nginx模块包
    • 安装Nginx依赖文件
    • 下载Nginx软件包
    • 配置Nginx服务器
    • 将Fastdfs软件包里面的http.conf和mime.types拷贝到/etc/fdfs目录下
    • 配置Nginx的fastdfs模块,并编辑文件
    • 配置Nginx
    • 启动Ningx服务
    • 查看服务启动情况
    • 启动追踪服务与存储节点服务
    • 上传图片测试
    • 通过浏览器远程访问

分布式文件系统

业务继续发展,单台服务器存储和响应也很快到达了瓶颈,新的业务需要文件访问具有高响应性、高可用性来支持系统。
在这里插入图片描述

优点:
扩展能力: 毫无疑问,扩展能力是一个分布式文件系统最重要的特点;
高可用性: 在分布式文件系统中,高可用性包含两层,一是整个文件系统的可用性,二是数据的完整和一致性;
弹性存储: 可以根据业务需要灵活地增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行。
缺点: 系统复杂度稍高,需要更多服务器

FastDFS概述_简介

FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB <file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。

FastDFS特性:

  • 文件不分块存储,上传的文件和OS文件系统中的文件一一对应
  • 支持相同内容的文件只保存一份,节约磁盘空间
  • 下载文件支持HTTP协议,可以使用内置Web Server,也可以和其他Web Server配合使用
  • 支持在线扩容
  • 支持主从文件

分布式文件服务提供商

  1. 阿里的OSS
  2. 七牛云存储
  3. 百度云储存

FastDFS概述_核心概念

在这里插入图片描述
FastDFS服务端有三个角色:跟踪服务器(tracker)、存储服务器(storage)和客户端(client)。

tracker

跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。

storage

存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。

client

客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

group

组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。

在这里插入图片描述

流程:
Tracker相当于FastDFS的大脑,不论是上传还是下载都是通过tracker来分配资源;客户端一般可以使用Ngnix等静态服务器来调用或者做一部分的缓存;存储服务器内部分为卷(或者叫做组),卷于卷之间是平行的关系,可以根据资源的使用情况随时增加,卷内服务器文件相互同步备份,以达到容灾的目的。

FastDFS概述_上传机制

首先客户端请求Tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的IP地址和端口号请求上传文件,存储服务器接收到请求后生产文件,并且将文件内容写入磁盘并返回给客户端file_id、路径信息、文件名等信息,客户端保存相关信息上传完毕。

在这里插入图片描述

内部机制如下

1、选择Tracker server
当集群中不止一个Tracker server时,由于Tracker之间是完全对等的关系,客户端在upload文件时可以任意选择一个trakcer。
2、选择Storage server
当选定Group后,Tracker会在Group内选择一个Storage Server给客户端
3、选择Storage path
当分配好Storage Server后,客户端将向Storage发送写文件请求,Storage将会为文件分配一个数据存储目录。

注意:
剩余存储空间最多的优先。

4、生成Fileid
选定存储目录之后,Storage会为文件生一个Fileid,由StorageServer Ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成,然后将这个二进制串进行base64编码,转换为可打印的字符串。
5、生成文件名
当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

FastDFS概述_下载机制

客户端带上文件名信息请求Tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的IP地址和端口号请求下载文件,存储服务器接收到请求后返回文件给客户端。

在这里插入图片描述

内部机制如下

1、client询问tracker下载文件的storage,参数为文件标识(组名和文件名)
2、tracker返回一台可用的storage
3、client直接和storage通讯完成文件下载

FastDFS环境搭建_Linux

下载安装gcc

 yum install gcc-c++ perl-devel pcre-devel openssl-devel zlib-devel wget

下载安装FastDFS

wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz

下载安装FastDFS依赖

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz

解压缩依赖tar包

tar -zxvf V1.0.43.tar.gz -C /usr/local
tar -zxvf V5.11.tar.gz -C /usr/local

编译并安装libfastcommon

cd /usr/local/libfastcommon-1.0.43/./make.sh && ./make.sh install

编译并安装FastDFS

cd /usr/local/fastdfs-6.06
./make.sh && ./make.sh install

进入etc目录下复制配置文件

cd /etc/fdfs/
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

创建tracker服务

创建tracker目录

mkdir -p /data/fastdfs/tracker

修改配置文件

vim /etc/fdfs/tracker.confdisabled=false                 #启用配置文件
port=22122                     #设置 tracker的端口号
base_path=/data/fastdfs/tracker #设置 tracker的数据文件和日志目录(需预先创建)
http.server_port=8888           #设置 http 端口号

启动tracker服务

/etc/init.d/fdfs_trackerd start

检查tracker服务

netstat -lntup |grep fdfs

创建storage服务

创建storage目录

mkdir -p /data/fastdfs/base
mkdir -p /data/fastdfs/storage

修改配置文件

vim /etc/fdfs/storage.confdisabled=false                       #启用配置文件
group_name=group1                     #组名,根据实际情况修改
port=23000                           #设置storage 的端口号
base_path=/data/fastdfs/base         #设置storage 的日志目录(需预先创建)
store_path_count=1                   #存储路径个数,需要和 store_path 个数匹配
store_path0=/data/fastdfs/storage       #存储路径
tracker_server=172.31.16.121:22122    #tracker 服务器的 IP 地址和端口号
http.server_port=8888                 #设置storage上启动的http服务的端口号,如安装的nginx的端口号

启动storage服务

/etc/init.d/fdfs_storaged start

查看storage服务

netstat -lntup |grep fdfs

修改Client配置文件

vim /etc/fdfs/client.confconnect_timeout=30
network_timeout=60
base_path=/data/fastdfs/client      # 日志路径
tracker_server=192.168.66.100:22122    # 追踪服务器的IP,有多个服务器可以另一行

创建日志目录

mkdir -p /data/fastdfs/client

FastDFS指令

在这里插入图片描述

上传指令

指令参数

fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]

参数含义:

  1. <config_file> :配置文件路径
  2. <local_filename>:本地文件路径
  3. [storage_ip:port]:(可选参数)
  4. [store_path_index] :(可选参数)

指令使用

[root@tracker fdfs]# fdfs_upload_file /etc/fdfs/client.conf 上传的文件路径

上传文件后会返回文件在FastDFS中的唯一文件标识,即卷名+文件名

下载指令

指令参数

fdfs_download_file <config_file> <file_id>[local_filename] [<download_offset><download_bytes>]

参数含义:

  1. <config_file> :配置文件路径
  2. <file_id> :文件在FastDFS中的唯一文件标识,即卷名+文件名
  3. [local_filename] :文件下载地址
  4. <download_offset> :(可选参数)文件下载开始时间
  5. <download_bytes> :(可选参数)文件下载的字节数

指令使用

[root@tracker fdfs]# fdfs_download_file /etc/fdfs/client.conf 上传时返回的唯一文件标识 指定位置

查看文件信息指令

指令参数

fdfs_file_info <config_file> <file_id>

参数含义:

  1. <config_file> :配置文件路径
  2. <file_id>:文件在FastDFS中的唯一文件标识,即卷名+文件名

指令使用

[root@tracker fdfs]# fdfs_file_info /etc/fdfs/client.conf 文件在FastDFS中的唯一文件标识

删除指令

指令参数

fdfs_delete_file <config_file> <file_id>

参数含义:

  1. <config_file> :配置文件路径
  2. <file_id>:文件在FastDFS中的唯一文件标识,即卷名+文件名

指令使用

[root@tracker fdfs]# fdfs_delete_file /etc/fdfs/client.conf 文件在FastDFS中的唯一文件标识

注意:
删除指令使用后,文件在该卷中的所有备份都会被删除,因为卷内的存储节点会相互同步,故慎用。

SpringBoot操作FastDFS

导入FastDFS依赖jar

<dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.26.5</version>
</dependency>

配置springboot的application.yml配置文件

#### 分布式文件系统的配置 ####
fdfs:# 超时时间connect-timeout: 600# 连接时间so-timeout: 1500tracker-list:- 192.168.52.136:22122

上传和下载文件操作


@SpringBootTest
class FastfdsDemoApplicationTests {// fastdfs 存储节点的客户端对象@Autowiredprivate FastFileStorageClient fastFileStorageClient;@Test/*** java api 对分布式文件系统上传文件操作*/public void testUpload() throws FileNotFoundException {// 1. 获取本地文件File file = new File("f:\\2.jpg");// 2. 创建传输文件的输入流FileInputStream inputStream = new FileInputStream(file);// 3. 上传文件/** 第一个参数:文件的输入流* 第二个参数:文件的大小* 第三个参数:文件的扩展名* 第四个参数:文件的元数据*/StorePath storePath = fastFileStorageClient.uploadFile(inputStream, file.length(), "jpg", null);// 4. 将文件名和卷名一起打印System.out.println(storePath.getFullPath());System.out.println("+++++++++++++++++++++++++++++");System.out.println(storePath.getGroup() + " | " + storePath.getPath());//        group1 /M00/00/00/wKg0iGX1bSSAdrMgAAexV9rfK9A537.jpg
//         ++++++++++++++++++++++++++++ +
//        group1 | M00/00/00/wKg0iGX1bSSAdrMgAAexV9rfK9A537.jpg}/*** java api 对分布式文件系统下载文件操作*/@Testpublic void testDownload() throws IOException {// 1. 下载文件/** 第一个参数:文件处于存储节点卷名* 第二个参数:文件在存储节点的文件名* 第三个参数:下载的回调函数*/byte[] bytes = fastFileStorageClient.downloadFile("group1", "M00/00/00/wKg0iGX1bSSAdrMgAAexV9rfK9A537.jpg", new DownloadByteArray());// 2. 创建文件的输出流FileOutputStream fileOutputStream = new FileOutputStream("f:\\1.jpg");// 3. 使用文件输出流将文件内筒字节数组写出fileOutputStream.write(bytes);// 4. 刷新输出流fileOutputStream.flush();// 5. 关闭输出流fileOutputStream.close();}}

前端文件上传到fastdfs

引入Thymeleaf视图解析器

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starterthymeleaf</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starterweb</artifactId>
</dependency>

编写index页面 引入wangEditor富文本编辑器

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>wangEditor demo</title>
</head>
<body><div id="div1"><p>欢迎使用 <b>wangEditor</b> 富文本编辑器</p>
</div><!-- 引入 js -->
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/wangeditor@latest/dist/wangEditor.min.js"></script><script type="text/javascript">var E = window.wangEditor; // 全局变量const editor = new E('#div1')//设置文件上传的参数名称editor.config.uploadFileName = 'file'// 配置 server 接口地址editor.config.uploadImgServer = '/upload'// 限制图片大小和类型editor.config.uploadImgMaxSize = 2 * 1024 * 1024 //2Meditor.config.uploadImgAccept = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']// 一次最多上传 5 个图片editor.config.uploadImgMaxLength = 5editor.create()
</script></body>
</html>

编写Controller接口

@RestController
public class UploadController {// fastdfs 存储节点的客户端对象@Autowiredprivate FastFileStorageClient fastFileStorageClient;@PostMapping("upload")public void upload(MultipartFile file) throws IOException {// 1. 判断文件是否为空if(file!=null){// 2. 获取上传图片名字String filename = file.getOriginalFilename();// 3. 获取图片后缀String fileSuffix = filename.substring(filename.lastIndexOf(".") + 1);// 4. 上传图片StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), fileSuffix, null);// 5. 创建成功会返回文件路径System.out.println(storePath.getFullPath());// TODO 保存到数据库}}
}

FastDFS集成Nginx

FastDFS集成Nginx的2个原因

为分布式文件系统提供Http服务支持

为分布式文件系统提供Http服务支持通过Nginx的web服务代理访问分布式文件系统的存储节点,从而实现通过http请求访问存储节点资源。

在这里插入图片描述

解决复制延迟问题

由于FastDFS的同卷的存储节点之间需要同步,当文件尚未同步完成时,访问请求到达改节点,获取的数据将是未同步完的不完整数据,即为复制延迟问题。通过Nginx检测请求的存储节点的数据,若该存储节点的数据尚未同步完成,则将请求转发至数据的原存储节点,从而解决复制延迟问题。

FastDFS集成Nginx_环境搭建

下载Fastdfs的Nginx模块包

cd /usr/local
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
tar -zxvf V1.22.tar.gz

安装Nginx依赖文件

yum install -y gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel gd-devel epel-release

下载Nginx软件包

wget https://nginx.org/download/nginx-1.19.2.tar.gz
cd nginx-1.19.2/

配置Nginx服务器

#建立Makefile文件,检查Linux系统环境以及相关的关键属性。
./configure --add-module=/usr/local/fastdfs-nginx-module-1.22/src/
#编译项目,主要将gcc源代码编译成可执行的目标文件
make
#根据上一步骤编译完成的数据安装到预定的目录中。
make install

将Fastdfs软件包里面的http.conf和mime.types拷贝到/etc/fdfs目录下

cp /usr/local/src/fastdfs-6.06/conf/mime.types /etc/fdfs/
cp /usr/local/src/fastdfs-6.06/conf/http.conf /etc/fdfs/

配置Nginx的fastdfs模块,并编辑文件

#拷贝文件
[root@localhost opt]cp /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
[root@localhost fdfs] vim mod_fastdfs.conf
#保存日志目录
base_path=/data/fastdfs/storage   
#tracker 服务器的 IP 地址以及端口号
tracker_server=192.168.66.100:22122 
#文件url中是否有group 名
url_have_group_name = true      
#存储路径
store_path0=/data/fastdfs/storage  
group_count = 1            #设置组的个数
#然后在末尾添加分组信息,目前只有一个分组,就只写一个
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage

配置Nginx

server {listen    80;server_name  localhost;location ~ /group[1-3]/M00 {alias /data/fastdfs/storage/data;ngx_fastdfs_module;}# 根目录下返回403location = / {return 403;}# log fileaccess_log  logs/img_access.log access;
}

启动Ningx服务

# 进入sbin目录
[root@tracker nginx]# cd sbin/
# 启动服务 -c:指定配置文件
[root@tracker sbin]# ./nginx -c /usr/local/nginx/conf/nginx.conf

查看服务启动情况

[root@tracker sbin]# ps -ef | grep nginx

启动追踪服务与存储节点服务

[root@tracker sbin]# fdfs_trackerd /etc/fdfs/tracker.conf start
[root@tracker sbin]# fdfs_storaged /etc/fdfs/storage.conf start

上传图片测试

[root@tracker fdfs]# fdfs_upload_file /etc/fdfs/client.conf /root/xxxxx.png
group1/M00/00/00/wKhyj1wrIUWAL5ASAAAfA8PiO7Y493.png

通过浏览器远程访问

http://192.168.66.100/group1/M00/00/00/wKhyj1wrIfqAD3NFAAn1fNRE8_M976.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2869476.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

sqllab第二十五A关通关笔记

知识点&#xff1a; 数值型注入双写绕过 oorranand这里不能用错误注入&#xff08;固定错误回显信息&#xff09;联合注入 测试发现跟25关好像一样&#xff0c;就是过滤了and or # 等东西 构造payload:id1/0 发现成功运算了&#xff0c;这是一个数值型的注入 构造payload:id…

音频的录制及播放

在终端安装好pip install pyaudio&#xff0c;在pycharm中敲入录音的代码&#xff0c;然后点击运行可以在10s内进行录音&#xff0c;录音后的音频会保存在与录音代码同一路径项目中&#xff0c;然后再新建项目敲入播放的代码&#xff0c;点击运行&#xff0c;会把录入的录音进行…

Java学习笔记------常用API(五)

爬虫 从网站中获取 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.reg…

浏览器如何进行静态资源缓存?—— 强缓存 协商缓存

在平时使用浏览器排查问题的过程中&#xff0c;我们有时会看到浏览器网络请求中出现304状态码&#xff0c;那么是什么情况下出现304呢&#xff1f;下面是关于这一现象的解释&#xff1a; 浏览器如何进行静态资源缓存&#xff1f;—— 强缓存 & 协商缓存 状态码 304浏览器如…

python的opencv最最基础初学

localhost中详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示_opencv imshow-CSDN博客 其实以下均为numpy 显示一张图片 import cv2 ####opencv读取的格式是BGR import matplotlib.pyplot as plt import numpy as np %matplotlib inline imgcv2.…

k8s之图形界面DashBoard【九】

文章目录 9. DashBoard9.1 部署Dashboard9.2 使用DashBoard 镇场 9. DashBoard 之前在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。其实&#xff0c;为了提供更丰富的用户体验&#xff0c;kubernetes还开发了一个基于web的用户界面&#xff08;Dashboard&…

java小型人事管理系统

开发工具&#xff1a; MyEclipseJdkTomcatSQLServer数据库 运行效果视频&#xff1a; https://pan.baidu.com/s/1hshFjiG 定制论文&#xff0c;联系下面的客服人员

Mac版Jmeter安装与使用模拟分布式环境

Mac版Jmeter安装与使用&模拟分布式环境 1 安装Jmeter 1.1 安装Java环境 国内镜像地址&#xff1a;https://repo.huaweicloud.com/java/jdk/11.0.29/jdk-11.0.2_osx-x64_bin.dmg 下载dmg后&#xff0c;双击进行安装。 配置环境变量&#xff1a; # 1 打开环境变量配置文件…

微信小程序关闭首页广告

由于之前微信小程序默认开启了首页广告位。导致很多老人误入广告页的内容&#xff0c;所以想着怎么屏蔽广告。好家伙&#xff0c;搜索一圈&#xff0c;要么是用户版本的屏蔽广告&#xff0c;或者是以下一个模棱两可的答案&#xff0c;要开发者设置一下什么参数的&#xff0c;如…

牛客网-SQL大厂面试题-1.各个视频的平均完播率

题目&#xff1a;各个视频的平均完播率 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start_time dat…

机器学习之客户违约预测模型搭建之案例实战

1. 决策数模型搭建 1.1 数据预处理 客户违约预测模型的目的是通过已有的客户信息和违约表现来搭建合适的模型&#xff0c;从而预测之后的客户是否会违约。首先通过pandas库读取数据相关知识读取客户的证信数据以及其交易表现&#xff0c;即是否违约记录&#xff0c;代码如下&…

RabbitMQ高级-高级特性

1.消息可靠性传递 在使用RabbitMQ的时候&#xff0c;作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ为我们提供了两种方式来控制消息的投递可靠性模式 1.confirm 确认模式 确认模式是由exchange决定的 2.return 退回模式 回退模式是由routing…

uniapp 利用uni-list 和 uni-load-more 组件上拉加载列表

列表的加载动作&#xff0c;在移动端开发中随处可见&#xff0c;笔者也是经常用到。今天正好有空&#xff0c;做一个总结&#xff0c;方便以后使用。uniapp 利用uni-list 和 uni-load-more 组件上拉加载列表操作步骤如下&#xff1a;1、资料准备 1&#xff09;、uni-load-more…

spring boot集成redis实现共享存储session

spring boot集成redis实现共享存储session redis实现共享存储session 首先下载redis,我下载的版本是5.0.14,目前官网貌似找不到5.x版本&#xff0c;可以自行去网上寻找。我这里的springboot版本是2.6.4引入redis依赖 <!-- https://mvnrepository.com/artifact/org.spring…

antd5 虚拟列表原理(rc-virtual-list)

github:https://github.com/react-component/virtual-list rc-virtual-list 版本 3.11.4(2024-02-01) 版本&#xff1a;virtual-list-3.11.4 Development npm install npm start open http://localhost:8000/List 组件接收 Props PropDescriptionTypeDefaultchildrenRender …

FFmpeg转码参数说明及视频转码示例

-b : 设置音频或者视频的转码码率 -b:v 只设置视频码率 -b:a 只设置音频码率 -ab: 只设置音频码率, 默认码率大小为: 128k bit/s -g: 设置视频GOP大小,表示I帧之间的间隔,默认为12 -ar: 设置音频采样率,默认0 -ac: 设置音频通道数量 默认0 -bf: 设置连…

读书·计算机组成与设计:软硬件接口RISC-V版·第三章

加法和减法 减法&#xff1a; 将负数用二进制补码的形式表现出来并相加 补码&#xff1a; 除了符号位&#xff0c;其他位置 取反 1 正数 &#x1f449; 负数补码&#xff1a; 全部取反 1 负数补码 &#x1f449; 正数 &#xff1a; 全部取反 1 减法就是&#xff1a; 将 相…

使用Lua编写Wireshark解析ProtoBuf插件

文章目录 Wireshark Protobuf Lua-dissectorStep 1: 获取 WiresharkStep 2: 配置ProtoBuf相关设置添加ProtoBuf查找路径 Step 3 运行和调试Lua代码1. 添加Lua脚本2. 运行和调试 Step 4: 写Lua Dissector代码 :)Step 5(Optional): Decode AsGithub工程地址 Wireshark Protobuf L…

inux(CentOS)/Windows-C++ 云备份项目(项目文件操作工具类设计,完成项目基本文件操作-读写-压缩-目录操作)

文章目录 1. 项目文件操作工具类设计 1. 项目文件操作工具类设计 根据前面的分析&#xff0c;这个文件类的基本属性如下&#xff1a; 文件大小信息文件最后修改时间文件最后一次访问时间&#xff0c;方便文件的热点管理文件名称&#xff0c;需要从http 请求行上的uri中获取基…

python问题:vscode切换环境,pip安装库网络错误

python问题&#xff1a;vscode切换环境&#xff0c;pip安装库网络错误 vscode切换环境pip安装库网络错误 记录一下遇见的python问题。 vscode切换环境 在vscode上面的搜索框输入 > select interpreter然后选择需要的环境。 pip安装库网络错误 用requirements.txt来安装…