国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java使用sftp文件服務(wù)器

這篇具有很好參考價(jià)值的文章主要介紹了Java使用sftp文件服務(wù)器。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.簡介

在工作中,對接第三方服務(wù)時(shí),往往存在文件的傳輸使用,使用stfp是一種簡單有效的方式,可以對文件進(jìn)行上傳和下載。下面是使用sftp文件服務(wù)器的demo,可以作為工具類放入項(xiàng)目中,即可簡單上手和使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-503954.html

FtpClient.java

public class FtpUtil {
    private static final Logger logger = LoggerFactory.getLogger(FtpUtil.class);

    public FtpUtil() {
    }
    
public static enum ProxyType {
        HTTP;

        private ProxyType() {
        }
    }

    public static class FtpDto implements Serializable {
        private static final long serialVersionUID = 2610830652396624141L;
        private String ip;
        private int port;
        private String user;
        private String password;
        private String remoteDir;
        private String localFilePathName;
        private String remoteFileName;
        private FtpUtil.ProxyType proxyType;
        private String proxyHost;
        private int proxyPort;

        public FtpDto() {
        }

        public String getIp() {
            return this.ip;
        }

        public void setIp(String ip) {
            this.ip = ip;
        }

        public int getPort() {
            return this.port;
        }

        public void setPort(int port) {
            this.port = port;
        }

        public String getUser() {
            return this.user;
        }

        public void setUser(String user) {
            this.user = user;
        }

        public String getPassword() {
            return this.password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public String getRemoteDir() {
            return this.remoteDir;
        }

        public void setRemoteDir(String remoteDir) {
            this.remoteDir = remoteDir;
        }

        public String getLocalFilePathName() {
            return this.localFilePathName;
        }

        public void setLocalFilePathName(String localFilePathName) {
            this.localFilePathName = localFilePathName;
        }

        public String getRemoteFileName() {
            return this.remoteFileName;
        }

        public void setRemoteFileName(String remoteFileName) {
            this.remoteFileName = remoteFileName;
        }

        public FtpUtil.ProxyType getProxyType() {
            return this.proxyType;
        }

        public void setProxyType(FtpUtil.ProxyType proxyType) {
            this.proxyType = proxyType;
        }

        public String getProxyHost() {
            return this.proxyHost;
        }

        public void setProxyHost(String proxyHost) {
            this.proxyHost = proxyHost;
        }

        public int getProxyPort() {
            return this.proxyPort;
        }

        public void setProxyPort(int proxyPort) {
            this.proxyPort = proxyPort;
        }
    }
}

SftpClient.java

public class SftpClient {

    /**
     * 上傳文件
     * 
     * @param ip
     * @param port
     * @param user
     * @param password
     * @param localFilePath
     * @param remoteDir
     * @param remoteFileName
     * @param useProxy
     */
    public static final String PROXY_HOST = "XXXX";
    public static final int PROXY_PORT = XX;

    public static void upload(String ip, int port, String user, String password, String localFilePath, String remoteDir,
                              String remoteFileName, boolean useProxy) {
        FtpDto ftpDto = new FtpDto();
        ftpDto.setIp(ip);
        ftpDto.setPort(port);
        ftpDto.setUser(user);
        ftpDto.setPassword(password);
        if (useProxy) {
            ftpDto.setProxyType(ProxyType.HTTP);
            ftpDto.setProxyHost(PROXY_HOST);
            ftpDto.setProxyPort(PROXY_PORT);
        }

        ftpDto.setRemoteDir(remoteDir);
        ftpDto.setLocalFilePathName(localFilePath);
        ftpDto.setRemoteFileName(remoteFileName);

        SftpUtil.upload(ftpDto);
    }

    /**
     * 下載文件
     * 
     * @param ip
     * @param port
     * @param user
     * @param password
     * @param localFilePath
     * @param remoteDir
     * @param remoteFileName
     * @param useProxy
     */
    public static void download(String ip, int port, String user, String password, String localFilePath,
                                String remoteDir, String remoteFileName, boolean useProxy) {
        FtpDto ftpDto = new FtpDto();
        ftpDto.setIp(ip);
        ftpDto.setPort(port);
        ftpDto.setUser(user);
        ftpDto.setPassword(password);
        if (useProxy) {
            ftpDto.setProxyType(ProxyType.HTTP);
            ftpDto.setProxyHost(PROXY_HOST);
            ftpDto.setProxyPort(PROXY_PORT);
        }

        ftpDto.setRemoteDir(remoteDir);
        ftpDto.setLocalFilePathName(localFilePath);
        ftpDto.setRemoteFileName(remoteFileName);

        SftpUtil.download(ftpDto);
    }
}

SftpUtil.java

pom依賴

        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
        </dependency>
import com.jcraft.jsch.*;

public class SftpUtil {

    private static int timeout = 60000;

    private static final Logger logger  = LoggerFactory.getLogger(SftpUtil.class);

    private static ChannelItem getChannel(FtpDto ftpDto) throws Exception {
        JSch jsch = new JSch();
        Session session = jsch.getSession(ftpDto.getUser(), ftpDto.getIp(), ftpDto.getPort());
        session.setPassword(ftpDto.getPassword());
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        session.setTimeout(timeout);
        if (!StringUtils.isBlank(ftpDto.getProxyHost())) {
            ProxyHTTP proxy = new ProxyHTTP(ftpDto.getProxyHost(), ftpDto.getProxyPort());
            session.setProxy(proxy);
        }
        session.connect();
        Channel channel = session.openChannel("sftp");
        channel.connect();

        ChannelItem channelItem = new ChannelItem();
        channelItem.setChannel((ChannelSftp) channel);
        channelItem.setSession(session);
        return channelItem;
    }

    private static void closeChannel(ChannelItem channelItem) {
        try {
            if (channelItem.getSession() != null) {
                channelItem.getSession().disconnect();
            }
        } catch (Exception e1) {
            logger.warn("退出SFTP管道異常");
        }
        try {
            if (channelItem.getChannel() != null) {
                channelItem.getChannel().disconnect();
            }
        } catch (Exception e1) {
            logger.warn("退出SFTP管道異常");
        }
    }

    public static void upload(FtpDto ftpDto) {
        upload(ftpDto, null);
    }

    public static void upload(FtpDto ftpDto, String capSubCodePath) {
        logger.info("開始SFTP文件上傳:{}", ftpDto.toString());
        ChannelSftp chSftp = null;
        ChannelItem channelItem = null;
        InputStream is = null;
        try {
            channelItem = SftpUtil.getChannel(ftpDto);
            chSftp = (ChannelSftp) channelItem.getChannel();
            try {
                if (StringUtils.isNotEmpty(capSubCodePath)) {
                    if (!isDirExist(chSftp, capSubCodePath)) {
                        chSftp.mkdir(capSubCodePath);
                    }
                }
                if (!isDirExist(chSftp, ftpDto.getRemoteDir())) {
                    createDir(chSftp, ftpDto.getRemoteDir());
                }
                logger.info("創(chuàng)建目錄成功:{}", ftpDto.getRemoteDir());
            } catch (SftpException e) {
                logger.error("創(chuàng)建目錄失敗:{}", ftpDto.getRemoteDir(), e);
            }

            String upPath = ftpDto.getRemoteDir();
            if (!(upPath.endsWith(File.separator) || upPath.endsWith("/"))) {
                upPath = upPath.concat(File.separator);
            }
            upPath = upPath.concat(ftpDto.getRemoteFileName());
            OutputStream out = chSftp.put(upPath, ChannelSftp.OVERWRITE);
            byte[] buff = new byte[1024 * 256];
            int read;
            if (out != null) {
                is = new FileInputStream(ftpDto.getLocalFilePathName());
                do {
                    read = is.read(buff, 0, buff.length);
                    if (read > 0) {
                        out.write(buff, 0, read);
                    }
                    out.flush();
                } while (read >= 0);
            }
        } catch (Exception e) {
            logger.error("SFTP文件上傳失敗", e);
            throw new ServiceException(CommonErrorCode.ERROR_FILE_UPLOAD, e, new String[] { ftpDto.getRemoteFileName() + "文件上傳失敗" }, e.getMessage());
        } finally {
            if (chSftp != null) {
                try {
                    chSftp.quit();
                } catch (Exception e) {
                    logger.warn("退出SFTP管道異常");
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (Exception e) {
                    logger.warn("關(guān)閉InputStream異常");
                }
            }
            closeChannel(channelItem);
        }
        logger.info("成功SFTP文件上傳:{}", ftpDto.getLocalFilePathName());
    }

    /**
     * 批量文件上傳
     * 
     * @param ftpDto
     * @return
     * @throws Exception
     */
    public static boolean batchUploadFile(List<FtpDto> ftpDtoList) throws Exception {
        ChannelItem channelItem = SftpUtil.getChannel(ftpDtoList.get(0));
        try {
            ChannelSftp chSftp = (ChannelSftp) channelItem.getChannel();
            boolean flag = batchUploadFile(chSftp, ftpDtoList);
            return flag;
        } catch (Exception e) {
            logger.error("SftpUtil.batchUploadFile上傳異常:", e);
        } finally {
            closeChannel(channelItem);
        }
        return false;
    }

    /**
     * 批量文件上傳
     * 
     * @param ftpDto
     * @return
     */
    private static boolean batchUploadFile(ChannelSftp chSftp, List<FtpDto> ftpDtoList) {
        boolean doneFlag = false;
        try {
            for (FtpDto ftpDto : ftpDtoList) {
                boolean flag = uploadFile(chSftp, ftpDto);
                if (!flag) {
                    doneFlag = false;
                    logger.error("SftpUtil.batchUploadFile上傳失?。篎ilePathName:{}", ftpDto.getLocalFilePathName());
                    break;
                } else {
                    doneFlag = true;
                    logger.info("SftpUtil.batchUploadFile上傳成功:FilePathName:{}", ftpDto.getLocalFilePathName());
                }
            }
        } catch (Exception e) {
            doneFlag = false;
            logger.error("SftpUtil.batchUploadFile上傳異常:", e);
        }
        return doneFlag;

    }

    private static boolean uploadFile(ChannelSftp chSftp, FtpDto ftpDto) {
        InputStream is = null;
        try {
            if (!isDirExist(chSftp, ftpDto.getRemoteDir())) {
                createDir(chSftp, ftpDto.getRemoteDir());
            }
            OutputStream out = chSftp.put(ftpDto.getRemoteDir().concat(ftpDto.getRemoteFileName()), ChannelSftp.OVERWRITE);
            byte[] buff = new byte[1024 * 256];
            int read;
            if (out != null) {
                is = new FileInputStream(ftpDto.getLocalFilePathName());
                do {
                    read = is.read(buff, 0, buff.length);
                    if (read > 0) {
                        out.write(buff, 0, read);
                    }
                    out.flush();
                } while (read >= 0);
            }
            return true;
        } catch (Exception e) {
            logger.error("SftpUtil文件上傳上傳異常:", e);
            throw new ServiceException(CommonErrorCode.ERROR_FILE_UPLOAD, e, new String[] { ftpDto.getRemoteFileName() + "文件上傳失敗" }, e.getMessage());
        } finally {
            if (chSftp != null) {
                try {
                    chSftp.quit();
                } catch (Exception e) {
                    logger.warn("退出SFTP管道異常");
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (Exception e) {
                    logger.warn("關(guān)閉InputStream異常");
                }
            }
        }
    }

    private static void createDir(ChannelSftp chSftp, String directory) {
        try {
            if (directory == null) {
                return;
            }
            if (isDirExist(chSftp, directory)) {
                chSftp.cd(directory);
            }
            String pathArry[] = directory.split("/");
            StringBuffer filePath = new StringBuffer("/");
            for (String path : pathArry) {
                if (path.equals("")) {
                    continue;
                }
                filePath.append(path + "/");
                if (isDirExist(chSftp, filePath.toString())) {
                    logger.info("進(jìn)入并設(shè)置為當(dāng)前目錄0:{}", filePath.toString());
                    chSftp.cd(filePath.toString());
                } else {
                    // 建立目錄
                    logger.info("建立目錄:{}", filePath.toString());
                    chSftp.mkdir(filePath.toString());
                    // 進(jìn)入并設(shè)置為當(dāng)前目錄
                    logger.info("進(jìn)入并設(shè)置為當(dāng)前目錄:{}", filePath.toString());
                    chSftp.cd(filePath.toString());
                }
            }
            chSftp.cd(directory);
        } catch (SftpException e) {
            logger.error("創(chuàng)建目錄失敗:{}", directory, e);
        }
    }

    private static boolean isDirExist(ChannelSftp chSftp, String directory) {
        boolean isDirExistFlag = false;
        try {
            SftpATTRS sftpATTRS = chSftp.lstat(directory);
            isDirExistFlag = true;
            return sftpATTRS.isDir();
        } catch (Exception e) {
            if (e.getMessage().toLowerCase().equals("no such file")) {
                isDirExistFlag = false;
            }
        }
        return isDirExistFlag;
    }

    public static void download(FtpDto ftpDto) {
        logger.info("開始SFTP文件下載:{}", ftpDto.toString());
        ChannelSftp chSftp = null;
        ChannelItem channelItem = null;
        OutputStream out = null;
        try {
            channelItem = SftpUtil.getChannel(ftpDto);
            chSftp = (ChannelSftp) channelItem.getChannel();
            InputStream is = chSftp.get(ftpDto.getRemoteDir().concat(ftpDto.getRemoteFileName()));
            out = new FileOutputStream(ftpDto.getLocalFilePathName());
            byte[] buff = new byte[1024 * 2];
            int read;
            if (is != null) {
                do {
                    read = is.read(buff, 0, buff.length);
                    if (read > 0) {
                        out.write(buff, 0, read);
                    }
                    out.flush();
                } while (read >= 0);
            }
        } catch (Exception e) {
            logger.warn("SFTP文件下載失敗:" + ftpDto.getRemoteDir().concat(ftpDto.getRemoteFileName()), e);
            throw new ServiceException(CommonErrorCode.ERROR_FILE_UPLOAD, e, new String[] { "文件下載失敗" }, ftpDto.getRemoteFileName());
        } finally {
            if (chSftp != null) {
                try {
                    chSftp.quit();
                } catch (Exception e) {
                    logger.warn("退出SFTP管道異常");
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (Exception e) {
                    logger.warn("關(guān)閉OutputStream異常");
                }
            }
            closeChannel(channelItem);
        }
        logger.info("成功SFTP文件下載:{}", ftpDto.getLocalFilePathName());
    }

    static class ChannelItem {

        Session session;
        Channel channel;

        public Session getSession() {
            return session;
        }

        public void setSession(Session session) {
            this.session = session;
        }

        public Channel getChannel() {
            return channel;
        }

        public void setChannel(Channel channel) {
            this.channel = channel;
        }
    }

    public static class MyProgressMonitor implements SftpProgressMonitor {

        private long transfered;

        public MyProgressMonitor(long transfered) {
            this.transfered = transfered;
        }

        @Override
        public boolean count(long count) {
            transfered = transfered + count;
            return true;
        }

        @Override
        public void end() {
        }

        @Override
        public void init(int op, String src, String dest, long max) {
        }
    }
}
    }

    public static class MyProgressMonitor implements SftpProgressMonitor {

        private long transfered;

        public MyProgressMonitor(long transfered) {
            this.transfered = transfered;
        }

        @Override
        public boolean count(long count) {
            transfered = transfered + count;
            return true;
        }

        @Override
        public void end() {
        }

        @Override
        public void init(int op, String src, String dest, long max) {
        }
    }
}

到了這里,關(guān)于Java使用sftp文件服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SSH連接SFTP傳輸:如何使用libssh庫在windows環(huán)境下進(jìn)行(文件、文件夾)傳輸?shù)竭h(yuǎn)端服務(wù)器

    SSH連接SFTP傳輸:如何使用libssh庫在windows環(huán)境下進(jìn)行(文件、文件夾)傳輸?shù)竭h(yuǎn)端服務(wù)器

    由于windows上的編譯器一般都是沒有l(wèi)ibssh庫的,所以如何我們想要使用libssh庫那么我們將會(huì)使用cmake來編譯libssh官網(wǎng)給出的源代碼 libssh庫下載地址: https://www.libssh.org/files/ 我們在編譯libssh庫之前需要先配置一些環(huán)境: a) 安裝 Visual Studio 或者 MinGW b) 安裝OpenSSL http://slproweb.com/p

    2024年04月24日
    瀏覽(32)
  • SSH連接SFTP傳輸:如何使用libssh庫在Linux環(huán)境下進(jìn)行(文件、文件夾)傳輸?shù)竭h(yuǎn)端服務(wù)器

    SSH連接SFTP傳輸:如何使用libssh庫在Linux環(huán)境下進(jìn)行(文件、文件夾)傳輸?shù)竭h(yuǎn)端服務(wù)器

    target_host :遠(yuǎn)端主機(jī)IP target_username :遠(yuǎn)端主機(jī)用戶名 ssh_options_set() 函數(shù)設(shè)置會(huì)話的選項(xiàng)。最重要的選項(xiàng)是: SSH_OPTIONS_HOST:要連接到的主機(jī)的名稱 SSH_OPTIONS_PORT:使用的端口(默認(rèn)為端口 22) SSH_OPTIONS_USER:要連接的系統(tǒng)用戶 SSH_OPTIONS_LOG_VERBOSITY:打印的消息數(shù)量 直接傳輸密

    2024年04月13日
    瀏覽(28)
  • 【Linux】搭建SFTP文件服務(wù)器

    【Linux】搭建SFTP文件服務(wù)器

    1.11 特點(diǎn) FTP(File Transfer Protocol)是一種用于在計(jì)算機(jī)之間傳輸文件的標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議。它提供了一種簡單而常用的方式來上傳和下載文件,以及進(jìn)行文件管理操作。 FTP協(xié)議的主要特點(diǎn)包括: 客戶端-服務(wù)器架構(gòu) :FTP使用客戶端-服務(wù)器模型,其中客戶端是發(fā)送文件請求的一方,

    2024年02月07日
    瀏覽(23)
  • vscode遠(yuǎn)程連接服務(wù)器(remote ssh)+上傳本地文件到服務(wù)器(sftp)

    vscode遠(yuǎn)程連接服務(wù)器(remote ssh)+上傳本地文件到服務(wù)器(sftp)

    一、vscode遠(yuǎn)程連接服務(wù)器 1.點(diǎn)擊vscode右邊工具欄點(diǎn)擊拓展,搜索remote ssh并安裝 2.安裝完成后,左邊工具欄會(huì)出現(xiàn)一個(gè)電腦圖標(biāo)的遠(yuǎn)程資源管理器,點(diǎn)擊后選擇SSH TARGETS的設(shè)置 3.然后選擇第一個(gè)..sshconfig 4.向服務(wù)器管理員索要服務(wù)器的連接信息并修改ssh config文件 ? 5.設(shè)置完成

    2024年02月01日
    瀏覽(27)
  • cmd控制臺(tái)通過sftp命令下載服務(wù)器文件

    cmd控制臺(tái)通過sftp命令下載服務(wù)器文件

    因?yàn)橥码娔X沒有遠(yuǎn)程連接工具,所以使用cmd連接遠(yuǎn)程,打開cmd控制臺(tái)。 1.sftp連接服務(wù)器 如果遠(yuǎn)程主機(jī)的 IP 是 192.168.1.100或者是域名www.test.cn,用戶名是user,在命令行模式下輸入:sftp user@192.168.1.100或者 user@www.test.cn?;剀?,根據(jù)提示輸入密碼。 ? 2.如果下載的是文件夾,可

    2024年02月11日
    瀏覽(33)
  • java連接sftp服務(wù)器實(shí)現(xiàn)上傳下載

    java連接sftp服務(wù)器實(shí)現(xiàn)上傳下載

    我最初的需求是java讀取遠(yuǎn)程windows服務(wù)器的文件。查了一圈,發(fā)現(xiàn)將遠(yuǎn)程服務(wù)器作為ftp服務(wù)器是最方便快捷的。著手準(zhǔn)備,首先要讓遠(yuǎn)程服務(wù)器提供ftp服務(wù),再做相關(guān)配置,然后通過代碼配置遠(yuǎn)程地址,用戶名密碼(ftp服務(wù)設(shè)置)讀取文件。 我目前使用的是 freeSSHd.exe,下載后

    2024年02月07日
    瀏覽(21)
  • 利用vscode--sftp,將本地項(xiàng)目/文件上傳到遠(yuǎn)程服務(wù)器中詳細(xì)教程

    利用vscode--sftp,將本地項(xiàng)目/文件上傳到遠(yuǎn)程服務(wù)器中詳細(xì)教程

    1、首先在 vscode 中下載? sftp : 2、然后在 vscode 中打開本地將要上傳的項(xiàng)目或文件: ?3、安裝完后,使用快捷鍵? ctrl+shift+P ?打開指令窗口,輸入? sftp:config ?,回車,在當(dāng)前目錄中會(huì)自動(dòng)生成? .vscode ?文件夾及? sftp.json host:工作站的IP地址 port:ssh的端口 username:工作站自

    2024年02月15日
    瀏覽(21)
  • Windows本地快速搭建SFTP文件服務(wù)器,并端口映射實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程訪問

    Windows本地快速搭建SFTP文件服務(wù)器,并端口映射實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程訪問

    轉(zhuǎn)載自cpolar極點(diǎn)云的文章:如何在內(nèi)網(wǎng)搭建SFTP服務(wù)器,并發(fā)布到公網(wǎng)可訪問 下載地址:http://www.freesshd.com/?ctt=download 選擇freeFTPD.exe下載 下載后,點(diǎn)擊安裝 安裝之后,它會(huì)提示是否啟動(dòng)后臺(tái)服務(wù),Yes 安裝后,點(diǎn)擊開始菜單– freeFTPd, 注意 :這里要點(diǎn)擊鼠標(biāo)右鍵, 以管理員權(quán)

    2024年02月05日
    瀏覽(35)
  • sftp和scp協(xié)議,哪個(gè)傳大文件到服務(wù)器傳輸速率快?

    sftp和scp協(xié)議,哪個(gè)傳大文件到服務(wù)器傳輸速率快?

    1.Win scp 6.1.1 2.XFTP 7 3.9.6G壓縮文件 4.Centos 7 5.聯(lián)想E14筆記本W(wǎng)in10 6.HW-S1730S-S48T4S-A交換機(jī) sftp和scp協(xié)議,哪個(gè)傳大文件到服務(wù)器速度快? 1.使用Win scp 上傳9.6G壓縮文件到Centos服務(wù)器 2.使用XFTP 上傳9.6G壓縮文件到Centos服務(wù)器 3.電腦網(wǎng)線直連服務(wù)器

    2024年02月05日
    瀏覽(35)
  • 使用本地電腦搭建可以遠(yuǎn)程訪問的SFTP服務(wù)器

    使用本地電腦搭建可以遠(yuǎn)程訪問的SFTP服務(wù)器

    1.1 下載 freesshd 服務(wù)器軟件 下載地址:freeSSHd and freeFTPd 選擇freeFTPD.exe下載 下載后,點(diǎn)擊安裝 安裝之后,它會(huì)提示是否啟動(dòng)后臺(tái)服務(wù),Yes 安裝后,點(diǎn)擊開始菜單– freeFTPd, 注意 :這里要點(diǎn)擊鼠標(biāo)右鍵, 以管理員權(quán)限 打開freeFTPd,如果以普通用戶打開freeFTPd, 將無法保存配置

    2024年02月12日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包