Windows搭建FTP服务器,JAVA实现读写功能

简介: Windows搭建FTP服务器,JAVA实现读写功能

Windows搭建FTP服务器


目录


博主介绍

🌟博主介绍

开启FTP功能

放行端口

重启计算机

添加FTP访问用户

添加FTP站点

本地访问测试

修改FTP设置

Java整合FTP代码实现

🌟作者相关的文章、资源分享🌟

💫点击直接资料领取💫


目录

博主介绍

🌟博主介绍


💂 个人主页:苏州程序大白


💂 个人社区:CSDN全国各地程序猿


🤟作者介绍:中国DBA联盟(ACDU)成员,CSDN全国各地程序猿(媛)聚集地管理员。目前从事工业自动化软件开发工作。擅长C#、Java、机器视觉、底层算法等语言。2019年成立柒月软件工作室。


💬如果文章对你有帮助,欢迎关注、点赞、收藏(一键三连)和C#、Halcon、python+opencv、VUE、各大公司面试等一些订阅专栏哦


🎗️ 承接各种软件开发项目


💅 有任何问题欢迎私信,看到会及时回复


👤 微信号:stbsl6,微信公众号:苏州程序大白


🎯 想加入技术交流群的可以加我好友,群里会分享学习资料


ec8979adc9f0484fb7c95cd9e8785122.png


开启FTP功能


首先打开控制面板–>程序–>启用或关闭Windows功能:


b5084d7f556849cbad5fc6bc9a38b244.png


勾选FTP服务、Web管理工具、万维网服务:


3464a3e53e4c42dfb8662274fb59505c.png


点击完成,等待生效:


993d50ea631c46fcb9212535ba02da7d.png


放行端口


打开Windows防火墙–>允许应用通过防火墙–>点击更改设置,勾选FTP服务器的公用和专用:


b61a7bbaad1b4220be008a32fab525fa.png


重启计算机


完成上面的操作后,重启计算机。


添加FTP访问用户


可选操作,如果是设置匿名访问FTP,或者直接使用Windows已有的用户,就不用创建用户。


打开计算机管理功能–>本地用户和组,选择用户,右键新用户:


0bed943fa5b44a7c87e939da858e3042.png


设置用户名和密码,勾选不能修改密码和密码永不过期,取消勾选其他的,点击创建:


f7a150599d04488db2db17d6916e930a.png


添加FTP站点


打开计算机管理功能,在服务中找到Internet Information Services,选中左侧用户,右键添加FTP站点:


bc9b4a9667bb40dea49985e8df4ad7a3.png


自定义站点名称,选择FTP要共享的文件路径:


96f80d3de4774d0898d7a85d0ed259be.png


设置IP地址为本机IP地址,端口默认21就行,如果没有SSL就选无SSL:


4eb7f938c6024274b5e7e6cf4c0a5766.png


勾选身份验证为基本,选择授权为指定用户,指定可以访问的用户,勾选权限为写入和读取(这里可根据具体情况自定义,如果要设置匿名访问的话就勾选匿名,然后允许访问里面选择所有用户),然后点击确定:


e125c2c5d8fe4b759ce51dd960bbae36.png


本地访问测试


文件管理器输入ip地址加端口:


d07084f52137410bac3dd11147267ae7.png


鼠标右键,选择登录(如果没有弹出登录界面的话,匿名访问则无此操作)


189c4220b91b476e968868e261788956.png


输入用户名和密码点击登录:


02b6da03a16b47988181a97d5eb3b3d0.png


可以正常访问:


013ff395782344adaeaf518a99ccba15.png


修改文件名测试是否可以进行修改:


6db0bf2b45e54f0daa7632d0d3070527.png


测试远程访问FTP(需要在同一个网络环境下):


17fafae0c86b4011b2ba98bb119aa67b.png


完成上面步骤,就可以访问呢。


修改FTP设置


打开计算机管理功能,在服务中找到Internet Information Services,展开计算机用户–>网站,双击创建的FTP服务器,然后就可以进行各种修改了:


fd48a05865e341b7a66e26751426bfbe.png


添加所有用户访问:


双击FTP身份验证,启用匿名身份验证:


83d9798f010b4a439a520f937fbc0d6f.png


双击FTP授权规则,右键添加允许规则:


a545bf91dc274527b0d79f608d6729b7.png


选择所有用户,然后勾选读取和写入权限,点击确定即可,再次访问时就不用输入密码了。


8508ac197a45455c9da0084fd1ca861f.png


Java整合FTP代码实现


package org.example;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.io.File;
import java.io.IOException;
/**
* @author 苏州程序大白
* @create 2021/12/16
* @desc 文件删除 (暂未实现删除路径内子文件夹功能)
*/
public class DeleteFTP {
    /**
     * @param pathName     要删除文件/目录所在ftp路径
     * @param fileName     要删除文件所在ftp的文件名
     * @param ftpClient    FTPClient对象
     */
    public void deleteFTP(String pathName, String fileName, FTPClient ftpClient) {
        try {
            ftpClient.changeWorkingDirectory(pathName);// 跳转到文件目录
            ftpClient.enterLocalPassiveMode(); //设置被动模式传输
            if (fileName != null && fileName != "") {
                //文件名不为空,删除指定文件
                ftpClient.deleteFile(pathName + File.separator + fileName);
                System.out.println("删除成功");
            } else {
                //文件名为空,删除路径下所有文件
                System.out.println("正在删除");
                //删除文件
                FTPFile[] files = ftpClient.listFiles();//获取目录下文件集合
                for (FTPFile file : files) {
                    if (file.isFile()) {
                        //判断为文件,直接删除
                        ftpClient.deleteFile(pathName + File.separator + file.getName());
                        System.out.println(file + ":已完成删除操作");
                    }
                    if (file.isDirectory()) {
                        /*有点问题,建议使用线程优化
                        //判断是文件夹,递归删除子文件夹内文件
                        deleteFTP(pathName + File.separator + file.getName(), null, ftpClient);
                        */
                    }
                }
                //删除文件夹
                ftpClient.removeDirectory(pathName);
                System.out.println("删除操作完成");
            }
        } catch (Exception e) {
            System.out.println("删除失败");
            e.printStackTrace();
        } finally {
            //关闭连接
            if(ftpClient.isConnected()){
                try{
                    ftpClient.disconnect();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
      }
    }


FTP文件下载实现:


package org.example;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* @author 苏州程序大白
* @create 2021/12/16
* @desc 文件下载(暂未实现下载路径内子文件中文件功能)
*/
public class DownloadFTP {
    /**
     * @param pathName     要下载文件所在ftp路径
     * @param fileName     要下载文件所在ftp的文件名
     * @param downloadPath 文件下载后保存的路径
     * @param ftpClient    FTPClient对象
     */
    public void downLoadFTP(String pathName, String fileName, String downloadPath, FTPClient ftpClient) {
        OutputStream outputStream = null;
        try {
            ftpClient.changeWorkingDirectory(pathName);// 跳转到文件目录
            ftpClient.enterLocalPassiveMode(); //设置被动模式传输
            if (fileName != null && fileName != "") {
                //文件名不为空,下载指定文件
                File filePath = new File(downloadPath);
                if (!filePath.exists()) {
                    filePath.mkdir();//目录不存在,创建目录
                }
                outputStream = new FileOutputStream(new File(downloadPath + File.separator + fileName));
                ftpClient.retrieveFile(fileName, outputStream);
                System.out.println("下载操作完成");
            } else {
                FTPFile[] files = ftpClient.listFiles();//获取目录下文件集合
                //文件名为空,下载路径下所有文件(不包含文件夹)
                for (FTPFile file : files) {
                    File filePath = new File(downloadPath);
                    if (!filePath.exists()) {
                        filePath.mkdir();//目录不存在,创建目录
                    }
                    File downloadFile = new File(downloadPath + File.separator + file.getName());
                    outputStream = new FileOutputStream(downloadFile);
                    ftpClient.retrieveFile(file.getName(), outputStream);
                    System.out.println("下载操作完成:" + downloadFile);
                }
            }
        } catch (Exception e) {
            System.out.println("下载失败");
            e.printStackTrace();
        } finally {
            //关闭连接
            if(ftpClient.isConnected()){
                try{
                    ftpClient.disconnect();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
            if(null != outputStream){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


连接FTP代码实现:


package org.example;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import java.io.IOException;
import java.net.MalformedURLException;
/**
* @author 苏程序大白
* @create 2021/12/16
* @desc 连接FTP服务链接
*/
public class InitFTP {
    //ftp服务器IP
    private static final String host = "127.0.0.1";
    //ftp服务器端口号默认为21
    private static final Integer port = 21;
    //ftp登录账号
    private static final String username = "ahzoo";
    //ftp登录密码
    private static final String password = "123456";
    public void initFtpClient(FTPClient ftpClient) {
        ftpClient.setControlEncoding("utf-8"); //设置编码
        try {
            System.out.println("正在连接FTP服务器:" + host + ":" + port);
            ftpClient.connect(host, port); //连接ftp服务器
            ftpClient.login(username, password); //登录ftp服务器
            int replyCode = ftpClient.getReplyCode(); //是否成功登录服务器
            if(!FTPReply.isPositiveCompletion(replyCode)){
                System.out.println("FTP服务器连接失败:" + host + ":" + port);
            }
            System.out.println("FTP服务器连接成功:" + host + ":" + port);
        }catch (MalformedURLException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}


移动文件所在ftp路径代码实现:


package org.example;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.io.File;
import java.io.IOException;
/**
* @author 苏程序大白
* @create 2021/12/16
* @desc 文件移动/重命名
*/
public class MoveFTP {
    /**
     * @param pathName     要移动文件所在ftp路径
     * @param fileName     要移动文件所在ftp的文件名
     * @param movePath     文件移动后的路径
     * @param moveName     文件移动后的文件名(与源文件一致时实现只移动不重命名,不一致则实现了移动+重命名)
     * @param ftpClient    FTPClient对象
     */
    public void moveFTP(String pathName, String fileName, String movePath, String moveName, FTPClient ftpClient) {
        try {
            ftpClient.enterLocalPassiveMode(); //设置被动模式传输
            if (!ftpClient.changeWorkingDirectory(movePath)) {
                //跳转到目标路径失败时创建目标目录
                ftpClient.makeDirectory(movePath);
            }
            if (moveName != null && moveName != "") {
                ftpClient.changeWorkingDirectory(pathName);// 跳转回需要进行操作的目录
                //移动后的文件名不为空,移动目标文件
                //ftpClient.rename(旧文件名, 新路径)
                ftpClient.rename(fileName, movePath + File.separator + moveName);
                System.out.println("文件移动操作已完成:" + movePath + File.separator + moveName);
            } else {
                //移动后的文件名为空,移动目标路径所有文件
                ftpClient.changeWorkingDirectory(pathName);// 跳转回需要进行操作的目录
                FTPFile[] files = ftpClient.listFiles();//获取目录下文件集合
                for (FTPFile file : files) {
                    ftpClient.rename(file.getName(), movePath + File.separator + file.getName());
                    System.out.println("移动操作完成:" + file.getName());
                }
            }
        } catch (Exception e) {
            System.out.println("移动失败");
            e.printStackTrace();
        } finally {
            //关闭连接
            if(ftpClient.isConnected()){
                try{
                    ftpClient.disconnect();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}


读取文件所在ftp路径代码实现:


package org.example;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.io.*;
/**
 * @author 苏程序大白
 * @create 2021/12/16
 * @desc 文件读取(暂未实现读取路径内子文件中文件功能)
 */
public class ReadFTP {
    /**
     * @param pathName     要读取文件所在ftp路径
     * @param fileName     要读取文件所在ftp的文件名
     * @param ftpClient    FTPClient对象
     */
    public void readFTP(String pathName, String fileName, FTPClient ftpClient) {
        InputStream inputStream = null;
        BufferedReader reader = null;
        try {
            System.out.println(pathName);
            ftpClient.changeWorkingDirectory(pathName);// 跳转到文件目录
            ftpClient.enterLocalPassiveMode(); //设置被动模式传输
            if (fileName != null && fileName != "") {
                //文件名不为空,读取指定文件
                inputStream = ftpClient.retrieveFileStream(fileName);
                reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                String fileL;
                StringBuffer buffer = new StringBuffer();
                while(((fileL=reader.readLine()) != null)){
                    buffer.append(fileL);
                }
                System.out.println(fileName + ":" + buffer.toString());
            } else {
                FTPFile[] files = ftpClient.listFiles();//获取目录下文件集合
                //文件名为空,读取路径下所有文件(不包含文件夹)
                System.out.println(files);
                for (FTPFile file : files) {
                    System.out.println(file.getName());
                    inputStream = ftpClient.retrieveFileStream(file.getName());
                    System.out.println(inputStream);
                    reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                    String fileL = null;
                    StringBuffer buffer = new StringBuffer();
                    while(((fileL=reader.readLine()) != null)){
                        buffer.append(fileL + "\n");
                    }
                    System.out.println(file + ":" + buffer.toString());
                    //retrieveFileStream使用了流,需要释放一下,不然会返回空指针
                    ftpClient.completePendingCommand();
                }
            }
        } catch (Exception e) {
            System.out.println("读取失败");
            e.printStackTrace();
        } finally {
            //关闭连接
            if(ftpClient.isConnected()){
                try{
                    ftpClient.disconnect();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
            if(null != inputStream){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != reader) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


上传到ftp服务器的路径代码实现:


package org.example;
import org.apache.commons.net.ftp.FTPClient;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
 * @author 苏程序大白
 * @create 2021/12/16
 * @desc 文件上传
 */
public class UploadFTP {
    /**
     * @param pathName 文件上传到ftp服务器的路径
     * @param fileName 文件上传到ftp服务器的名称
     * @param originPath 要上传文件所在的路径(绝对路径)
     **/
    public void uploadFile(String pathName, String fileName, String originPath, FTPClient ftpClient){
        InputStream inputStream = null;
        try{
            System.out.println("文件传输中");
            inputStream = new FileInputStream(new File(originPath));//将文本数据转换为输入流
            ftpClient.enterLocalPassiveMode(); //设置被动模式传输
            ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);//以二进制文件形式输入
            ftpClient.makeDirectory(pathName);//在ftp服务器创建目标路径
            ftpClient.changeWorkingDirectory(pathName);//切换到目标路径
            ftpClient.enterLocalPassiveMode();//开启端口
            ftpClient.storeFile(fileName, inputStream);//开始上传,inputStream表示数据源。
            //ftpClient.storeFile(new String(fileName.getBytes("UTF-8"),"ISO-8859-1") inputStream);
            System.out.println("文件上传操作完成");
        }catch (Exception e) {
            System.out.println("文件上传失败");
            e.printStackTrace();
        }finally{
            //关闭连接
            if(ftpClient.isConnected()){
                try{
                    ftpClient.disconnect();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
            if(null != inputStream){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


文本写入到ftp服务器的路径代码实现:


package org.example;
import org.apache.commons.net.ftp.FTPClient;
import java.io.*;
/**
 * @author 苏程序大白
 * @create 2021/12/16
* @desc 文本写入
*/
public class WriteFTP {
    /**
     * @param pathName 文本写入到ftp服务器的路径
     * @param fileName 文本写入到ftp服务器的名称
     * @param contentText 要写入的文本数据
     **/
    public void writeFile(String pathName, String fileName, String contentText, FTPClient ftpClient){
        InputStream inputStream = null;
        try{
            System.out.println("开始写入操作");
            inputStream = new ByteArrayInputStream(contentText.getBytes());//将文本数据转换为输入流,通过getBytes()方法避免中文乱码
            ftpClient.enterLocalPassiveMode(); //设置被动模式传输
            ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);//以二进制文件形式输入
            ftpClient.makeDirectory(pathName);//在ftp服务器创建目标路径
            ftpClient.changeWorkingDirectory(pathName);//切换到目标路径
            ftpClient.enterLocalPassiveMode();//开启端口
            ftpClient.storeFile(fileName, inputStream);//开始写入,inputStream表示数据源。
            System.out.println("文本写入操作完成");
        }catch (Exception e) {
            System.out.println("文本写入失败");
            e.printStackTrace();
        }finally{
            //关闭连接
            if(ftpClient.isConnected()){
                try{
                    ftpClient.disconnect();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
            if(null != inputStream){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}=


🌟作者相关的文章、资源分享🌟

🌟让天下没有学不会的技术🌟


学习C#不再是难问题


🌳《C#入门到高级教程》🌳


有关C#实战项目


👉C#RS232C通讯源码👈


👉C#委托数据传输👈


👉C# Modbus TCP 源代码👈


👉C# 仓库管理系统源码👈


👉C# 欧姆龙通讯Demo👈


👉C#+WPF+SQL目前在某市上线的车管所摄像系统👈


👉2021C#与Halcon视觉通用的框架👈


👉2021年视觉项目中利用C#完成三菱PLC与上位机的通讯👈


👉VP联合开源深度学习编程(WPF)👈


✨有关C#项目欢迎各位查看个人主页✨


🌟机器视觉、深度学习🌟


学习机器视觉、深度学习不再是难问题


🌌《Halcon入门到精通》🌌


🌌《深度学习资料与教程》🌌


有关机器视觉、深度学习实战


👉2021年C#+HALCON视觉软件👈


👉2021年C#+HALCON实现模板匹配👈


👉C#集成Halcon的深度学习软件👈


👉C#集成Halcon的深度学习软件,带[MNIST例子]数据集👈


👉C#支持等比例缩放拖动的halcon WPF开源窗体控件👈


👉2021年Labview联合HALCON👈


👉2021年Labview联合Visionpro👈


👉基于Halcon及VS的动车组制动闸片厚度自动识别模块👈


✨有关机器视觉、深度学习实战欢迎各位查看个人主页✨


🌟Java、数据库教程与项目🌟


学习Java、数据库教程不再是难问题


🍏《JAVA入门到高级教程》🍏


🍏《数据库入门到高级教程》🍏


有关Java、数据库项目实战


👉Java经典怀旧小霸王网页游戏机源码增强版👈


👉js+css类似网页版网易音乐源码👈


👉Java物业管理系统+小程序源码👈


👉JavaWeb家居电子商城👈


👉JAVA酒店客房预定管理系统的设计与实现SQLserver👈


👉JAVA图书管理系统的研究与开发MYSQL👈


✨有关Java、数据库教程与项目实战欢迎各位查看个人主页✨


🌟分享Python知识讲解、分享🌟


学习Python不再是难问题


🥝《Python知识、项目专栏》🥝


🥝《Python 检测抖音关注账号是否封号程》🥝


🥝《手把手教你Python+Qt5安装与使用》🥝


🥝《用一万字给小白全面讲解python编程基础问答》🥝


🥝《Python 绘制Android CPU和内存增长曲线》🥝


🥝《☀️苏州程序大白用万字解析Python网络编程与Web编程☀️《❤️记得收藏❤️》》🥝


有关Python项目实战


👉Python基于Django图书管理系统👈


👉Python管理系统👈


👉2021年9个常用的python爬虫源码👈


👉python二维码生成器👈


✨有关Python教程与项目实战欢迎各位查看个人主页✨


🌟分享各大公司面试题、面试流程🌟


面试成功不是难事


🍏《2021年金九银十最新的VUE面试题☀️《❤️记得收藏❤️》》🍏


🍏《只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官《❤️记得收藏❤️》》🍏


🍏《❤️用一万字给小白全面讲解python编程基础问答❤️《😀记得收藏不然看着看着就不见了😀》》🍏


✨有关各大公司面试题、面试流程欢迎各位查看个人主页✨



目录
打赏
0
0
0
0
9
分享
相关文章
宝塔Windows面板:轻松管理服务器的图形化神器
宝塔Windows面板是一款专为Windows服务器用户设计的图形化管理工具,旨在简化IIS配置、环境搭建与安全管理等复杂操作。它支持一键部署全栈运行环境(如IIS/Apache、PHP、MySQL等),提供可视化站点管理、安全防护与监控功能,并拥有丰富的插件生态。无论是个人站长、开发者还是中小企业,都能通过这款免费工具快速搭建网站、优化性能并强化安全性。尽管在高版本IIS兼容性和插件丰富度上略逊于Linux版,但其零门槛操作和全面功能仍使其成为理想的入门级服务器管理解决方案。
64 5
解决Windows云服务器带宽和CPU利用率高的问题
本文针对Windows Server 2019 ×64系统,介绍如何排查云服务器带宽和CPU利用率过高的问题。通过任务管理器、性能监视器等工具定位高资源占用的进程,并根据进程是否正常采取相应措施。对于正常进程,建议优化或升级配置;对于异常进程,建议关闭进程并进行系统备份或还原。详细步骤包括使用“perfmon -res”查看资源使用情况,结合PID查找具体进程,分析处理后台任务、杀毒软件及应用程序的影响。
76 1
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
165 1
|
1月前
|
Windows系统云服务器配置多用户登录
本教程介绍了在Windows云服务器上配置远程桌面服务的详细步骤,包括安装桌面会话主机和远程桌面授权、允许多用户远程连接以及配置新用户并加入远程桌面用户组。通过添加角色和功能、设置组策略以及管理用户权限,实现多用户同时登录和远程访问。按照指引操作,可顺利完成服务器的远程访问配置,提升管理和使用效率。
109 0
|
1月前
|
Windows Server 2025 中文版、英文版下载 (2025 年 3 月更新)
Windows Server 2025 中文版、英文版下载 (2025 年 3 月更新)
92 4
Windows Server 2025 中文版、英文版下载 (2025 年 3 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 3 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 3 月更新)
87 4
Windows Server 2022 中文版、英文版下载 (2025 年 3 月更新)
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
61 29
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
提升Windows Server环境安全性:ADAudit Plus的五大关键优势
在Windows Server环境中,内置的安全审计工具虽有用,但存在专业门槛高、耗时及功能缺失等问题。第三方工具ADAudit Plus应运而生,其五大优势包括:日志聚合、关键活动检测、定制化报告、灵活安全配置和长期日志保留,有效提升系统监控与合规能力。选择ADAudit Plus,助力企业更高效应对审计挑战,强化安全性。
|
2月前
|
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 2 月更新)
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 2 月更新)
81 11
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 2 月更新)
|
2月前
|
Windows Server 2025 中文版、英文版下载 (2025 年 2 月更新)
Windows Server 2025 中文版、英文版下载 (2025 年 2 月更新)
124 7
Windows Server 2025 中文版、英文版下载 (2025 年 2 月更新)

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等