详解与FTP服务器相关操作
目录
什么是FTP服务器
搭建FTP服务器相关
编辑
Unity中与FTP相关的类
上传文件到FTP服务器
使用FTP服务器上传文件的关键点
开始上传
从FTP服务器下载文件到客户端
使用FTP下载文件的关键点
开始下载
关于FTP服务器的其他操作
将文件的上传,下载,删除等其他操作使用面向对象的思想用单例模式进行封装
测试FTPMgr模块的功能
什么是FTP服务器
- 基本概念:FTP 是文件传输协议(File Transfer Protocol)的缩写,FTP 服务器就是遵循该协议,专门用来存储和管理文件,并为用户提供文件上传和下载服务的服务器。用户可以通过 FTP 客户端软件连接到 FTP 服务器,进行文件的传输操作。
- 功能特点
- 文件传输:支持文件的上传和下载,用户可以将本地计算机上的文件上传到 FTP 服务器,也可以从 FTP 服务器下载所需的文件到本地。
- 用户管理:可以设置不同的用户账户,并为每个用户分配不同的权限,如读取、写入、删除等权限,从而实现对文件访问的精细控制。
- 目录管理:允许创建、删除、重命名目录,以及在目录之间移动文件等操作,方便对文件进行组织和管理。
搭建FTP服务器相关
#region 知识点一 搭建FTP服务器的几种方式//1.使用别人做好的FTP服务器软件 (学习阶段建议使用)//2.自己编写FTP服务器应用程序,基于FTP的工作原理,用Socket中TCP通信来进行编程(工作后由后端程序员来做) //3.将电脑搭建为FTP文件共享服务器 (工作后由后端程序员来做)//第2,3点我们前端程序主要做了解 //一般在工作中不会由我们来完成这部分工作#endregion #region 知识点二 使用别人做好的FTP服务器软件来搭建FTP服务器//下载Serv-U等FTP服务器软件 //在想要作为FTP服务器的电脑上运行之 //1.创建域 直接不停下一步即可 //2.使用单向加密 //3.创建用于上传下载的FTP 账号和密码#endregion #region 总结 //在实际商业项目开发当中,如果需要用FTP来进行文件传输 //那么FTP服务器的解决方案都是由后端程序员来完成的 //不管它使用哪种方式来搭建FTP服务器 //只要能正常上传下载内容并且保证安全性即可#endregion
我们使用Serv-U服务器作为我们的FTP服务器
Unity中与FTP相关的类
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using UnityEngine;public class Lesson18 : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){#region 知识点一 NetWorkCredential类//命名空间:System.Net//NetWorkCredential通信凭证类//用于在FTP文件传输时,设置账号密码NetworkCredential n = new NetworkCredential("DamnF", "DamnF123");#endregion#region 知识点二 FtpWebRequest类//命名空间:System.Net//Ftp文件传输协议客户端操作类//主要用于:上传,下载,删除服务器上的文件//重要方法//1.Create 创建新的WebRequest,用于进行相关的Ftp相关操作FtpWebRequest req =FtpWebRequest.Create(new Uri("ftp://127.0.0.1/Test.txt"))as FtpWebRequest;//2.Abort 如果正在进行文件传输,用此方法可以终止文件传输req.Abort();//3.GetRequestStream 获取用于上传的流Stream s= req.GetRequestStream();//4.GetResponse 返回Ftp服务器响应//FtpWebResponse res= req.GetResponse()as FtpWebResponse;//重要成员//1.Credentials 通信凭证,设置为NetWorkCredential对象req.Credentials = n;//2.KeepAlive bool值,当完成请求时是否关闭到Ftp服务器的控制连接(默认为true,不关闭);req.KeepAlive = false;//3.Method 操作命令设置// WebRequestMethods.Ftp类中的操作命令属性// DeleteFile 删除文件// DownloadFile 下载文件// ListDirectory 获取文件简短列表// ListDirectoryDetails 获取文件详细列表// MakeDirectory 创建目录// RemoveDirectory 删除目录// UploadFile 上传文件req.Method = WebRequestMethods.Ftp.DownloadFile;//4.UseBinary 是否使用2进制传输req.UseBinary = true;//5.RenameTo 重命名req.RenameTo = "myTest.txt";#endregion#region 知识点三 FtpWebResponse类//命名空间:System.Net//它是用于封装Ftp服务器对请求的响应//它提供操作状态和从服务器下载数据//我们可以通过FtpWebRequest对象中的GetResponse()方法获取//当使用完毕时,要使用Close释放//通过它真正获取服务器的内容FtpWebResponse res = req.GetResponse() as FtpWebResponse;//重要方法//1.Close:释放所有资源res.Close();//2.GetResponseStream:返回从Ftp下载数据的流Stream stream= res.GetResponseStream();//重要成员//1.ContentLength:接收到数据的长度print(res.ContentLength);//2.ContentType:接收到数据的类型print(res.ContentType);//3.StatusCode:Ftp服务器下发的最新状态码print(res.StatusCode);//4.StatusDescription:Ftp服务器下发的状态代码的文本print(res.StatusDescription);//5.BannerMessage:登录前建立连接时Ftp服务器下发的消息print(res.BannerMessage);//6.ExitMessage:Ftp会话结束时服务器发送的消息print(res.ExitMessage);//7.LastModified:Ftp服务器上的文件的上次修改日期和时间print(res.LastModified);#endregion#region 总结//通过C#提供的3个类//我们就可以完成客户端向Ftp服务器//操作文件的需求,比如//上传,下载,删除文件#endregion }// Update is called once per framevoid Update(){}
}
上传文件到FTP服务器
使用FTP服务器上传文件的关键点
//1.通信凭证
// 进行FTP连接时操作时的账号和密码
//2.操作命令WebRequestMethod.Ftp
// 设置你想要进行的Ftp操作
//3.文件流相关FileStream和Stream
// 上传和下载时都会使用到文件流
//4.保证ftp服务器已经开启
// 并且能够正确访问
开始上传
try{//1.创建一个Ftp连接FtpWebRequest req = FtpWebRequest.Create(new Uri("ftp://127.0.0.1/pic.png")) as FtpWebRequest;//2.设置通信凭证(如果不支持匿名,就必须设置这一步)//将代理相关设置置空 避免服务器同时有http相关服务冲突req.Proxy = null;NetworkCredential n = new NetworkCredential("DamnF", "DamnF123");req.Credentials = n;//请求完毕后,是否关闭控制连接,如果想要关闭,需要设置falsereq.KeepAlive = false;//3.设置操作命令req.Method = WebRequestMethods.Ftp.UploadFile;//设置操作命令为上传文件//4.指定传输类型req.UseBinary = true;//5.得到用于上传的流对象Stream upLoadStream = req.GetRequestStream();//6.开始上传using (FileStream file = File.OpenRead(Application.streamingAssetsPath + "/test.png")){//我们可以一点一点的把这个文件中的字节数组读取出来 然后存到上传流中byte[] bytes = new byte[1024];//返回值是真正从文件中读了多少个字节int contentLength = file.Read(bytes, 0, bytes.Length);//不停的去读取文件中的字节流 除非读完了 不然一直读 并且写入到上传流中while (contentLength != 0){//写入上传流中upLoadStream.Write(bytes, 0, contentLength);//写完了继续读取contentLength = file.Read(bytes, 0, bytes.Length);}//出了循环就证明写完了file.Close();upLoadStream.Close();//上传完毕print("上传完毕");}}catch (Exception e){print("上传失败 出错了" + e.Message);}
从FTP服务器下载文件到客户端
使用FTP下载文件的关键点
//1.通信凭证
// 进行FTP文件操作时需要的账号和密码
//2.操作命令WebRequestMethods.Ftp
// 设置你想要进行的Ftp操作
//3.文件流相关的FileStream和Stream
// 上传和下载时都需要使用的文件流
// 下载文件流使用FtpWebResponse类获取
//4.保证Ftp服务器已开启
// 并且能够正常访问
开始下载
try{//1.创建一个Ftp连接//这里和上传不同,上传的文件名是自己定的 下载的文件名必须是资源服务器里有的FtpWebRequest req = FtpWebRequest.Create(new Uri("ftp://127.0.0.1/文本格式.jpg")) as FtpWebRequest;//2.设置一个通信凭证(如果不支持匿名,就必须设置这一步)//请求完毕后 是否关闭控制连接,如果要进行多次操作 可以设置falseNetworkCredential n = new NetworkCredential("DamnF", "DamnF123");req.Credentials = n;req.KeepAlive = false;//3.设置操作命令req.Method = WebRequestMethods.Ftp.DownloadFile;//4.指定传输类型req.UseBinary = true;req.Proxy = null;//5.得到用于上传的流对象//相当于把请求发送给ftp服务器,就会携带我们想要的信息返回FtpWebResponse res = req.GetResponse()as FtpWebResponse;//这就是下载流Stream DownLoadStream = res.GetResponseStream ();//6.开始上传print(Application.persistentDataPath);using (FileStream file = File.Create(Application.persistentDataPath + "/DamnF112233.jpg")){byte[] bytes = new byte[1024];int contentLength = file.Read(bytes, 0, bytes.Length);while (contentLength != 0){file.Write(bytes, 0, contentLength);contentLength = file.Read(bytes, 0, bytes.Length);}file.Close();DownLoadStream.Close();print("下载完毕");}}catch (Exception e){print("下载出错了" + e.Message);}
关于FTP服务器的其他操作
//除了上传和下载,还有其他操作
//比如:
//1.删除文件
//2.获取文件大小
//3.创建文件夹
//4.获取文件列表
//等等
将文件的上传,下载,删除等其他操作使用面向对象的思想用单例模式进行封装
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Events;public class FtpMgr
{private static FtpMgr instance=new FtpMgr();public static FtpMgr Instance => instance;//ftp服务器地址private string FTP_PATH = "ftp://127.0.0.1";//用户名密码private string USER_NAME = "DamnF";private string PASSWORD = "DamnF123";public async void UpLoadFile(string fileName,string localPath,UnityAction action=null){await Task.Run(() =>{try{//通过一个线程执行这里边的逻辑,不会影响主线程//1.创建ftp连接FtpWebRequest req = FtpWebRequest.Create(new Uri(FTP_PATH+fileName)) as FtpWebRequest;//2.设置通信凭证(如果不支持匿名,就必须设置这一步)//将代理相关设置置空 避免服务器同时有http相关服务冲突req.Proxy = null;NetworkCredential n = new NetworkCredential(USER_NAME, PASSWORD);req.Credentials = n;//请求完毕后,是否关闭控制连接,如果想要关闭,需要设置falsereq.KeepAlive = false;//3.设置操作命令req.Method = WebRequestMethods.Ftp.UploadFile;//4.指定传输类型req.UseBinary = true;//5.得到用于上传的流对象Stream upLoadStream = req.GetRequestStream();//6.开始上传using (FileStream file = File.OpenRead(localPath)){//我们可以一点一点的把这个文件中的字节数组读取出来 然后存到上传流中byte[] bytes = new byte[1024];//返回值是真正从文件中读了多少个字节int contentLength = file.Read(bytes, 0, bytes.Length);//不停的去读取文件中的字节流 除非读完了 不然一直读 并且写入到上传流中while (contentLength != 0){//写入上传流中upLoadStream.Write(bytes, 0, contentLength);//写完了继续读取contentLength = file.Read(bytes, 0, bytes.Length);}//出了循环就证明写完了file.Close();upLoadStream.Close();}//上传完毕Debug.Log("上传完毕");}catch (Exception e){Debug.Log("上传出错了" + e.Message);}});//上传结束后,你想在外部做的事情action?.Invoke();}public async void DownLoadFile(string fileName,string localName,UnityAction action=null){await Task.Run(() =>{try{FtpWebRequest req = FtpWebRequest.Create(new Uri(FTP_PATH + fileName)) as FtpWebRequest;NetworkCredential n = new NetworkCredential(USER_NAME, PASSWORD);req.Credentials = n;req.KeepAlive = false;req.Proxy = null;req.UseBinary = true;req.Method = WebRequestMethods.Ftp.DownloadFile;FtpWebResponse res = req.GetResponse() as FtpWebResponse;Stream DownLoadStream = res.GetResponseStream();using (FileStream file = File.Create(localName)){byte[] bytes = new byte[1024];int contentLength = file.Read(bytes, 0, bytes.Length);while (contentLength != 0){file.Write(bytes, 0, contentLength);contentLength = file.Read(bytes, 0, bytes.Length);}file.Close();DownLoadStream.Close();Debug.Log("下载完毕");}res.Close();}catch (Exception e){Debug.Log("下载出错了" + e.Message);}});action?.Invoke();}public async void DeleteFile(string fileName,UnityAction<bool> action=null){await Task.Run(() =>{try{FtpWebRequest req = FtpWebRequest.Create(new Uri(FTP_PATH + fileName)) as FtpWebRequest;NetworkCredential n = new NetworkCredential(USER_NAME, PASSWORD);req.Credentials = n;req.Proxy = null;req.KeepAlive = false;req.UseBinary = true;req.Method = WebRequestMethods.Ftp.DeleteFile;FtpWebResponse res = req.GetResponse() as FtpWebResponse;res.Close();action?.Invoke(true);}catch (Exception e){Debug.Log("删除文件出错"+e.Message);action?.Invoke(false);}});}public async void GetFileSize(string fileName,UnityAction<long>action=null){try{await Task.Run(() =>{FtpWebRequest req = FtpWebRequest.Create(new Uri(FTP_PATH + fileName)) as FtpWebRequest;NetworkCredential n = new NetworkCredential(USER_NAME, PASSWORD);req.Credentials = n;req.KeepAlive = false;req.Proxy = null;req.UseBinary = true;req.Method = WebRequestMethods.Ftp.GetFileSize;FtpWebResponse res = req.GetResponse() as FtpWebResponse;action?.Invoke(res.ContentLength);res.Close();});}catch (Exception e){Debug.Log("得到文件大小出错" + e.Message);}}public async void CreateDirectory(string DirectoryName,UnityAction<bool>action=null){try{await Task.Run(() =>{FtpWebRequest req = FtpWebRequest.Create(new Uri(FTP_PATH + DirectoryName)) as FtpWebRequest;NetworkCredential n = new NetworkCredential(USER_NAME, PASSWORD);req.Credentials = n;req.Proxy = null;req.KeepAlive = false;req.UseBinary = true;req.Method = WebRequestMethods.Ftp.MakeDirectory;FtpWebResponse res = req.GetResponse() as FtpWebResponse;res.Close();action?.Invoke(true);});}catch (Exception e){Debug.Log("文件夹创建失败" + e.Message);action?.Invoke(false);}}public async void GetFileList(string directoryName,UnityAction<List <string>>action=null){try{await Task.Run(() =>{FtpWebRequest req = FtpWebRequest.Create(new Uri(FTP_PATH + directoryName)) as FtpWebRequest;NetworkCredential n = new NetworkCredential(USER_NAME, PASSWORD);req.Credentials = n;req.Proxy = null;req.KeepAlive = false;req.UseBinary = true;req.Method = WebRequestMethods.Ftp.ListDirectory;FtpWebResponse res = req.GetResponse() as FtpWebResponse;//把下载的信息流转化为StreamReader对象,方便我们一行一行的读取信息StreamReader streamReader = new StreamReader(res.GetResponseStream());//用于存储文件名的列表List<string> nameStrs = new List<string>();//一行一行的读取信息string line= streamReader.ReadLine();while(line!=null){nameStrs.Add(line);line = streamReader.ReadLine();}action?.Invoke(nameStrs);res.Close();});}catch (Exception e){Debug.Log("文件列表返回失败" + e.Message);action?.Invoke(null);}}
}
测试FTPMgr模块的功能
FtpMgr.Instance.UpLoadFile("/DamnFPic.png", Application.streamingAssetsPath + "/test.png", () =>{print("上传成功,调用委托函数");});print("测试测试");print(Application.persistentDataPath);FtpMgr.Instance.DownLoadFile("/文本格式.jpg", Application .persistentDataPath +"/zhangdeshuai1234.jpg", () => {print("下载成功,调用委托函数");});print("测试测试");
//1.删除文件FtpMgr.Instance.DeleteFile("/Pic.png", (result) =>{print(result ? "删除完毕" : "删除失败");});//2.获取文件大小FtpMgr.Instance.GetFileSize("/文本格式.jpg", (result) => {print("文件大小是:" + result);});//3.创建文件夹FtpMgr.Instance.CreateDirectory("/DamnF", (result) => {print(result ? "创建成功" : "创建失败");});//4.获取文件列表FtpMgr.Instance.GetFileList("", (list) => {if(list==null){print("返回文件列表失败");return;}else{for (int i = 0; i < list.Count ; i++){print(list[i]);}}});
相关文章:
详解与FTP服务器相关操作
目录 什么是FTP服务器 搭建FTP服务器相关 编辑 Unity中与FTP相关的类 上传文件到FTP服务器 使用FTP服务器上传文件的关键点 开始上传 从FTP服务器下载文件到客户端 使用FTP下载文件的关键点 开始下载 关于FTP服务器的其他操作 将文件的上传,下载&…...
远程登录一个Linux系统,如何用命令快速知道该系统属于Linux的哪个发行版,以及该服务器的各种配置参数,运行状态?
远程登录一个Linux系统,如何用命令快速知道该系统属于Linux的哪个发行版,以及该服务器的各种配置参数,运行状态? 查看Linux发行版信息 查看发行版名称和版本: cat /etc/*-release或 lsb_release -a查看内核版本&#…...
解决 .Net 6.0 项目发布到IIS报错:HTTP Error 500.30
今天在将自己开发许久的项目上线的时候,发现 IIS 发布后请求后端老是报一个 HTTP Error 500.30 的异常,如下图所示。 后来仔细调查了一下发现是自己的程序中写了 UseStaticFiles 的依赖注入,这个的主要作用就是发布后端后,想…...
STM32F103_HAL库+寄存器学习笔记16 - 监控CAN发送失败(轮询方式)
导言 《STM32F103_HAL库寄存器学习笔记15 - 梳理CAN发送失败时,涉及哪些寄存器》从上一章节看到,当CAN消息发送失败时,CAN错误状态寄存器ESR的TEC会持续累加,LEC等于0x03(ACK错误)。本次实验的目的是编写一…...
Java并发-AQS框架原理解析与实现类详解
什么是AQS? AQS(AbstractQueuedSynchronizer)是Java并发包(JUC)的核心基础框架,它为构建锁和同步器提供了高效、灵活的底层支持。本文将从设计原理、核心机制及典型实现类三个维度展开,帮助读者…...
实现定长的内存池
池化技术 所谓的池化技术,就是程序预先向系统申请过量的资源,然后自己管理起来,以备不时之需。这个操作的价值就是,如果申请与释放资源的开销较大,提前申请资源并在使用后并不释放而是重复利用,能够提高程序…...
vs2022使用git方法
1、创建git 2、在cmd下执行 git push -f origin master ,会把本地代码全部推送到远程,同时会覆盖远程代码。 3、需要设置【Git全局设置】,修改的代码才会显示可以提交,否则是灰色的不能提交。 4、创建的分支,只要点击…...
Mysql中表的使用(3)
目录 1.updata的使用 2.delete(删除表中数据)drop(删除表) 数据库的约束 1.NOT NULL 指定列不能为空 2.UNIQUE指定列唯一 3.DEFAULT(默认值) 4.PRIMARY KEY 5.自增主键 1.updata的使用 1.0update 表名 set 列名x where 列名y; 2.0update 表名 s…...
BUUCTF-Web(1-20)
目录 一.SQL注入 (1)[极客大挑战 2019]EasySQL 万能密码 (7)[SUCTF 2019]EasySQL 堆叠注入 解一: 解二: (10)[强网杯 2019]随便注 堆叠注入 解一: 解二: 解三: (8)[极客大挑战 2019]LoveSQL 联…...
Uniapp:确认框
目录 一、 出现场景二、 效果展示三、具体使用 一、 出现场景 在项目的开发中,会经常出现删除数据的情况,如果直接删除的话,可能会存在误删,用户体验不好,所以需要增加一个消息提示,提醒用户是否删除。 二…...
【前端网络请求入门】XMLHttpRequest与Fetch保姆级教程
新手学前端时,经常会被「如何让网页和服务器说话」难住。今天我们用最通俗的语言,把浏览器最常用的两种网络请求方式——XMLHttpRequest和Fetch讲清楚,还会带完整的代码示例,跟着敲一遍就能上手! 一、先搞懂「网络请求…...
力扣热题100—滑动窗口(c++)
3.无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 unordered_set<char> charSet; // 用于保存当前窗口的字符int left 0; // 窗口左指针int maxLength 0; // 最长子串的长度for (int right 0; right < s.siz…...
实验四 中断实验
一、实验目的 掌握中断服务程序的编写。 二、实验电路 三、实验内容 1.实验用PC机内部的中断控制器8259A,中断源用TPC-ZK实验箱上的单脉冲电路,将单脉冲电路的输出接中断请求信号IRQ,每按一次单脉冲按键产生一次…...
腾势品牌欧洲市场冲锋,科技豪华席卷米兰
在时尚与艺术的交汇点,米兰设计周的舞台上,一场汽车界的超级风暴正在酝酿,腾势品牌如一头勇猛无畏的雄狮,以雷霆万钧之势正式向欧洲市场发起了冲锋。其最新力作——腾势Z9GT的登场,仿佛是一道闪电划破夜空,…...
第五阶段:项目实践与后续学习指引
模块 10:综合项目实践 在这个模块中,我们将通过实际项目来综合运用前面所学的 Python 知识。我们会选择一个命令行记事本应用作为主要示例,同时简要介绍其他项目的思路。 项目:命令行记事本应用 1. 项目规划 良好的项目规划是…...
MoogDB数据库日常维护技巧与常见问题解析
在当今的数据驱动世界中,数据库作为信息存储与管理的核心组件,扮演着举足轻重的角色。MoogDB作为一款高性能、易扩展的数据库解决方案,越来越受到开发者和企业的青睐。为了确保MoogDB的稳定性与高性能,定期的日常维护及对常见问题…...
Java 中的各种锁详解
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
多店铺商城_多商户商城系统源码_免费开源!
在电商行业快速发展的今天,多店铺商城系统(B2B2C模式)已成为企业实现平台化运营的核心工具,就像我们平时用的淘宝,京东那样。如果你想做一个电商平台就需要这种多店铺商城系统。 本文将深入探讨多商户商城系统的核心功…...
【2025年泰迪杯数据挖掘挑战赛】A题 数据分析+问题建模与求解+Python代码直接分享
目录 2025年泰迪杯数据挖掘挑战赛A题完整论文:建模与求解Python代码1问题一的思路与求解1.1 问题一的思路1.1.1对统计数据进行必要说明:1.1.2统计流程:1.1.3特殊情况的考虑: 1.2 问题一的求解1.2.1代码实现1.2.2 问题一结果代码分…...
NO.95十六届蓝桥杯备战|图论基础-单源最短路|负环|BF判断负环|SPFA判断负环|邮递员送信|采购特价产品|拉近距离|最短路计数(C++)
P3385 【模板】负环 - 洛谷 如果图中存在负环,那么有可能不存在最短路。 BF算法判断负环 执⾏n轮松弛操作,如果第n轮还存在松弛操作,那么就有负环。 #include <bits/stdc.h> using namespace std;const int N 2e3 10, M 3e3 1…...
ROS2模块库概览
一、核心通信与基础库(最常用) 客户端库 rclcpp (ROS Client Library for C) 核心API:create_node(), create_publisher(), create_subscription()高级特性: 生命周期节点:通过rclcpp_lifecycle实现configure/activate…...
在机器视觉检测中为何选择线阵工业相机?
线阵工业相机,顾名思义是成像传感器呈“线”状的。虽然也是二维图像,但极宽,几千个像素的宽度,而高度却只有几个像素的而已。一般在两种情况下使用这种相机: 1. 被测视野为细长的带状,多用于滚筒上检测的问…...
Linux应急中常用命令
pwdx {pid} 提供进程的 当前工作目录,即进程正在操作的目录。它显示的是进程的运行时工作目录,而不是启动时的可执行文件路径。等同于ls -al /proc//cwdps -aux 和 top 都是用来查看 Linux 系统中进程的命令,但它们的功能、输出格式和使用场景…...
Node.js 文件读取与复制相关内容
Node.js 文件读取与复制相关内容的系统总结,包括 同步读取、异步读取、流式读取、复制操作、两者对比及内存测试。 🧩 一、Node.js 文件读取方式总结 Node.js 使用 fs(文件系统)模块进行文件操作: 1. 同步读取&#…...
数据结构-串
串是数据结构中一种重要的数据类型,广泛应用于文本处理、信息检索等领域。本文将从串的基本概念、存储实现、应用举例以及总结核心知识点四个方面进行详细讲解,帮助大家更好地理解和掌握串这一数据结构。 一、串的基本概念及其抽象数据类型 1.1 串的定…...
Windows 下 MongoDB ZIP 版本安装指南
在开发和生产环境中,MongoDB 是一种非常流行的 NoSQL 数据库,以其灵活性和高性能而受到开发者的青睐。对于 Windows 用户来说,MongoDB 提供了多种安装方式,其中 ZIP 版本因其灵活性和轻量级的特点,成为很多开发者的首选…...
在 Spring Boot 中实现服务器端推送(SSE):两种方法的比较与实践
在现代 Web 应用中,实时数据推送是一个常见的需求。无论是实时消息通知、股票行情更新,还是在线游戏的实时数据交互,服务器端推送(Server-Sent Events,简称 SSE)都是一种高效且易于实现的解决方案。在 Spri…...
2025年十六届蓝桥杯Python B组原题及代码解析
相关试题可以在洛谷上测试用例: 2025 十六届 蓝桥杯 Python B组 试题 A:攻击次数 答案:103 print(103)代码: # 初始化敌人的血量 x 2025# 初始化回合数 turn 0# 模拟攻击过程 while x > 0:# 回合数加一turn 1# 第一个英…...
数据清洗到底在清洗什么?
在大数据时代,数据是每个企业的五星资产,被誉为“新石油”,但未经处理的数据往往参杂着大量“杂质”。这些“脏数据”不仅影响分析结果,严重的甚至误导企业决策。数据清洗作为数据预处理的关键环节,正是通过“去芜存菁…...
Microsoft Azure 基础知识简介
Microsoft Azure 基础知识简介 已完成100 XP 2 分钟 Microsoft Azure 是一个云计算平台,提供一系列不断扩展的服务,可帮助你构建解决方案来满足业务目标。 Azure 服务支持从简单到复杂的一切内容。 Azure 具有简单的 Web 服务,用于在云中托…...
