使用ftp上传文件

当初做这个的缘由是甲方要求用户上传的文件单独存放在另一台服务器上即文件服务器与项目所在服务器分离。

第一步,安装Serv-U_FTP_Server,Serv-U FTP Server是一种被广泛运用的FTP服务器端软件。地址:http://www.downza.cn/soft/183848.html

第二步引入相关jar包:

<!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>
        </dependency>

工具类:文件服务器在阿里云,注意主动模式和被动模式配置

    public static boolean storeFtpFile(String now,List<File> filelist,String storePath,String url,int port,String userName,String password) throws FileNotFoundException {
        FileInputStream fis = null;
        boolean result = false;
        FTPClient ftp = new FTPClient();
        ftp.setControlEncoding("UTF-8");
        ftp.setPassiveNatWorkaround(true);
        try {
            // 连接至服务器,端口默认为21时,可直接通过URL连接
            ftp.connect(url, port);
            // 登录服务器
            ftp.login(userName, password);
            // 判断返回码是否合法
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                // 不合法时断开连接
                ftp.disconnect();
                // 结束程序
                return result;
            }
            // 判断ftp目录是否存在,如果不存在则创建目录,包括创建多级目录
            ftp.enterLocalActiveMode();
//                        ftp.enterLocalPassiveMode(); 
            // 判断ftp目录是否存在,如果不存在则创建目录,包括创建多级目录
            String s = "/"+storePath;
            String[] dirs = s.split("/");
            ftp.changeWorkingDirectory("/");            
                //按顺序检查目录是否存在,不存在则创建目录  
                for(int i=1; dirs!=null&&i<dirs.length; i++) {  
                    if(!ftp.changeWorkingDirectory(dirs[i])) {  
                        if(ftp.makeDirectory(dirs[i])) {  
                            if(!ftp.changeWorkingDirectory(dirs[i])) {  
                                return false;  
                            }  
                        }else {  
                            return false;                         
                        }  
                    }  
                }  
            // 设置文件操作目录
            ftp.changeWorkingDirectory(storePath);

//            ftp.makeDirectory(storePath);
            // 设置文件操作目录
            ftp.changeWorkingDirectory(storePath);
            // 设置文件类型,二进制
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            // 设置缓冲区大小
            ftp.setBufferSize(3072);
            // 上传文件
            
            for(File file:filelist){
                fis = new FileInputStream(file);
                String filename=file.getName();
                String type = FileTypeUtils.getFileType(filename);
                String name = FileTypeUtils.getName(filename);
                String ftpName=now+"."+type;
                result = ftp.storeFile(ftpName, fis);
                
            }
            
            // 关闭输入流
            fis.close();
            // 登出服务器
            ftp.logout();
        } catch (IOException e) {
            try {
                // 判断输入流是否存在
                if (null != fis) {
                    // 关闭输入流
                    fis.close();
                }
                // 判断连接是否存在
                if (ftp.isConnected()) {
                    // 断开连接
                    ftp.disconnect();
                }
            } catch (IOException e2) {
                e2.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            try {
                // 判断输入流是否存在
                if (null != fis) {
                    // 关闭输入流
                    fis.close();
                }
                // 判断连接是否存在
                if (ftp.isConnected()) {
                    // 断开连接
                    ftp.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

 

转载于:https://www.cnblogs.com/dsh2018/p/9673659.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot应用中使用FTP上传文件可以使用Apache Commons Net库提供的FTP客户端实现。以下是一个简单示例: 1. 添加依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency> ``` 2. 创建FTP客户端 使用以下代码创建FTP客户端: ```java public class FtpClientHelper { private String server; private int port; private String username; private String password; private FTPClient ftpClient; public FtpClientHelper(String server, int port, String username, String password) { this.server = server; this.port = port; this.username = username; this.password = password; ftpClient = new FTPClient(); } public void connect() throws IOException { ftpClient.connect(server, port); ftpClient.login(username, password); } public void disconnect() throws IOException { ftpClient.logout(); ftpClient.disconnect(); } public boolean isConnected() { return ftpClient.isConnected(); } public void uploadFile(File file, String remoteDir) throws IOException { InputStream inputStream = new FileInputStream(file); ftpClient.storeFile(remoteDir + "/" + file.getName(), inputStream); inputStream.close(); } } ``` 3. 使用FTP客户端上传文件 在需要上传文件的地方,创建FTP客户端实例并连接到FTP服务器: ```java FtpClientHelper ftpClientHelper = new FtpClientHelper("ftp.example.com", 21, "username", "password"); ftpClientHelper.connect(); ``` 然后,使用FTP客户端上传文件: ```java File file = new File("path/to/local/file"); String remoteDir = "/path/to/remote/dir"; ftpClientHelper.uploadFile(file, remoteDir); ``` 最后,记得在上传完成后断开FTP连接: ```java ftpClientHelper.disconnect(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值