FTP服务器上传下载

简介: windows下FTP服务器可以使用3CDaemon,下载后点击FTP服务器设置进行相关设置:使用jar包坐标如下: <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency>使用java连接服务器并进行操作,登录FTP后默认在FTP根目录下,如果操作文件需要切换到待操作目录。

windows下FTP服务器可以使用3CDaemon,下载后点击FTP服务器设置进行相关设置:

QQ_20190507174117

使用jar包坐标如下:

        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>
        </dependency>

使用java连接服务器并进行操作,登录FTP后默认在FTP根目录下,如果操作文件需要切换到待操作目录。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import com.btzh.exception.BusinessException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.springframework.util.StringUtils;

/**
 * FTP工具类
 *
 * @author faith
 */
public class FtpUtil {
 
    public final static String HOSTNAME = "127.0.0.1";
    public final static Integer PORT = 21;
    public final static String USERNAME = "admin";
    public final static String PASSWORD = "666666";
    public static FTPClient FTP_CLIENT;

    public static void main(String[] args) {
        FtpUtil.uploadFileByPath("/upload/img/", "test.jpg", "D:\\timg.jpg");
        FtpUtil.downloadFile("/upload/img/", "test.jpg", "D:\\ftp");
        FtpUtil.deleteFile("upload/img", "test.jpg");
    }

    /**
     * 上传文件by文件名
     * @param pathName
     * @param fileName
     * @param originFileName
     */
    public static void uploadFileByPath(String pathName, String fileName, String originFileName) {
        InputStream inputStream = null;
        FTP_CLIENT = getFtpClient();

        try {
            FTP_CLIENT.setFileType(FTP.BINARY_FILE_TYPE);

            createIfNotExsit(pathName);
            FTP_CLIENT.storeFile(fileName, inputStream = new FileInputStream(new File(originFileName)));
        } catch (Exception e) {
            throw new RuntimeException("上传文件失败: " + e);
        } finally {
            closeIOResource(FTP_CLIENT, inputStream, null);
        }
    }

    /**
     * 上传文件by流
     * @param pathname
     * @param fileName
     * @param inputStream
     */
    public static void uploadFileByStream(String pathname, String fileName, InputStream inputStream) {
        FTP_CLIENT = getFtpClient();

        try {
            FTP_CLIENT.setFileType(FTP.BINARY_FILE_TYPE);

            createIfNotExsit(pathname);
            FTP_CLIENT.storeFile(fileName, inputStream);
        } catch (Exception e) {
            throw new RuntimeException("上传文件失败");
        } finally {
            closeIOResource(FTP_CLIENT, inputStream, null);
        }
    }
 
    /**
     * 下载文件 
     * @param pathname
     * @param filename
     * @param localPath
     * @return
     */
    public static void downloadFile(String pathname, String filename, String localPath) {
        OutputStream outputStream = null;
        FTP_CLIENT = getFtpClient();

        try {
            FTP_CLIENT.changeWorkingDirectory(pathname);

            FTPFile[] ftpFiles = FTP_CLIENT.listFiles();
            for (FTPFile ftpFile : ftpFiles) {
                if (ftpFile.getName().equalsIgnoreCase(filename)) {
                    FTP_CLIENT.retrieveFile(ftpFile.getName(), outputStream = new FileOutputStream(new File(localPath + "/" + ftpFile.getName())));
                    return;
                }
            }

            throw new BusinessException("未找到文件:" + pathname + "/" + filename);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            closeIOResource(FTP_CLIENT, null, outputStream);
        }
    }

    /**
     * 删除文件
     * @param pathName
     * @param fileName
     */
    public static void deleteFile(String pathName, String fileName) {
        FTP_CLIENT = getFtpClient();

        try {
            FTP_CLIENT.changeWorkingDirectory(pathName);
            FTP_CLIENT.dele(fileName);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            closeIOResource(FTP_CLIENT, null, null);
        }
    }

    /**
     * 改变工作目录
     * @param directory
     * @return
     */
    public static boolean changeWorkingDirectory(String directory) {
        try {
            return FTP_CLIENT.changeWorkingDirectory(directory);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 创建目录
     * @param directory
     */
    public static void createIfNotExsit(String directory) {
        if (directory.equalsIgnoreCase("/")) {
            return;
        }

        while (directory.startsWith("/") || directory.endsWith("/")) {
            directory = directory.substring(directory.startsWith("/") ? 1 : 0, directory.endsWith("/") ? directory.length() - 1 : directory.length());
            if (directory.equalsIgnoreCase("/")) {
                return;
            }
        }

        String[] filePaths = StringUtils.delimitedListToStringArray(directory, "/");
        for (String filePath : filePaths) {
            if (!existFilePath(filePath)) {
                makeDirectory(filePath);
            }
            changeWorkingDirectory(filePath);
        }
    }

    /**
     * 判断文件是否存在
     * @param filePath
     * @return
     */
    public static boolean existFilePath(String filePath) {
        try {
            return FTP_CLIENT.listFiles(filePath).length > 0;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 创建文件目录
     * @param directory
     * @return
     */
    public static boolean makeDirectory(String directory) {
        try {
            return FTP_CLIENT.makeDirectory(directory);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 连接FTP服务器
     */
    public static FTPClient getFtpClient() {
        FTP_CLIENT = new FTPClient();
        FTP_CLIENT.setControlEncoding("UTF-8");

        try {
            FTP_CLIENT.connect(HOSTNAME, PORT);

            if (!FTP_CLIENT.login(USERNAME, PASSWORD)) {
                throw new RuntimeException("ftp登录失败");
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        return FTP_CLIENT;
    }

    /**
     * 关闭使用的资源
     * @param ftpClient
     * @param inputStream
     */
    private static void closeIOResource(FTPClient ftpClient, InputStream inputStream, OutputStream outputStream) {
        if (ftpClient.isConnected()) {
            try {
                ftpClient.logout();
                ftpClient.disconnect();
            } catch (IOException e) {
            }
        }
        if (null != inputStream) {
            try {
                inputStream.close();
            } catch (IOException e) {
            }
        }
        if (null != outputStream) {
            try {
                outputStream.close();
            } catch (IOException e) {
            }
        }
    }
}
目录
相关文章
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
774 18
|
Ubuntu 安全 网络安全
在Ubuntu系统下使用vsftpd配置FTP服务器的步骤
以上就是在Ubuntu系统下使用vsftpd配置FTP服务器的步骤。这些步骤都是基础的,但足够让你建立一个简单的FTP服务器。如果你需要更高级的功能,例如SSL加密、虚拟用户等,你可能需要进一步研究vsftpd的配置选项。
933 13
|
安全 编译器 Linux
深入解析与防范:基于缓冲区溢出的FTP服务器攻击及调用计算器示例
本文深入解析了利用缓冲区溢出漏洞对FTP服务器进行远程攻击的技术,通过分析FreeFlow FTP 1.75版本的漏洞,展示了如何通过构造过长的用户名触发缓冲区溢出并调用计算器(`calc.exe`)。文章详细介绍了攻击原理、关键代码组件及其实现步骤,并提出了有效的防范措施,如输入验证、编译器保护和安全编程语言的选择,以保障系统的安全性。环境搭建基于Windows XP SP3和Kali Linux,使用Metasploit Framework进行攻击演示。请注意,此内容仅用于教育和研究目的。
687 4
|
Linux
Linux 服务器下载百度网盘文件
本教程指导如何使用 `bypy` 库从百度网盘下载文件。首先通过 `pip install bypy` 安装库,接着运行 `bypy info` 获取登录链接并完成授权,最后将文件置于指定目录并通过 `bypy downdir /Ziya-13b-v1` 命令下载至本地。
2001 1
Linux 服务器下载百度网盘文件
阿里云国际版购买了服务器后如何下载发票?
阿里云国际版购买了服务器后如何下载发票?
|
安全 Ubuntu Linux
在Linux中,如何进行FTP服务器配置?
在Linux中,如何进行FTP服务器配置?
|
网络协议 文件存储 Windows
Windows Server 2019 FTP服务器搭建
Windows Server 2019 FTP服务器搭建
808 0
|
安全 网络协议 网络安全
Windows Server 2003 FTP服务器搭建
Windows Server 2003 FTP服务器搭建
403 0
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
|
9月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
802 10

热门文章

最新文章