Java使用commons-net实现FTP文件上传详解编程语言

将文件或者图片保存在FTP服务器上,使用commons-net包。

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
  
import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 
  
public class FTPUploader { 
  
    public String username = ""; 
    public String password = ""; 
    public String ip = ""; 
    public Integer port = 21; 
  
    public FTPUploader(String username, String password, String ip, int port) { 
        this.username = username; 
        this.password = password; 
        this.ip = ip; 
        this.port = port; 
    } 
  
    public void upload(File file, String remoteFileName, String remoteFilePath) 
            throws Exception { 
        upload(ip, port, username, password, file, remoteFilePath, 
                remoteFileName); 
    } 
  
    private void upload(String ip, int port, String userName, String password, 
            File file, String remotePathName, String remoteName) 
            throws Exception { 
        FTPClient ftpClient = new FTPClient(); 
        try { 
            ftpClient.connect(ip, port); 
            ftpClient.login(userName, password); 
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
            ftpClient.enterLocalPassiveMode(); 
            upload(ftpClient, file, remotePathName, remoteName); 
        } catch (Exception e) { 
            throw new Exception("upload to ftp faild"); 
        } finally { 
            if (ftpClient != null && ftpClient.isConnected()) { 
                try { 
                    ftpClient.disconnect(); 
                } catch (IOException e) { 
                } 
            } 
        } 
    } 
  
    private void upload(FTPClient ftpClient, File file, String remotePathName, 
            String remoteName) throws Exception { 
        changeDirectory(ftpClient, remotePathName); 
        uploadFile(ftpClient, file, remotePathName, remoteName); 
        backToRootDirectory(ftpClient); 
    } 
  
    private void changeDirectory(FTPClient ftpClient, String path) 
            throws IOException { 
        int nextSeperator = path.indexOf("/", 1); 
        String currentPath = null; 
        if (nextSeperator < 0) { 
            nextSeperator = path.length(); 
            currentPath = path.substring(1, nextSeperator); 
            changeDirectory0(ftpClient, currentPath); 
            return; 
        } else { 
            currentPath = path.substring(1, nextSeperator); 
            changeDirectory0(ftpClient, currentPath); 
            changeDirectory(ftpClient, path.substring(nextSeperator)); 
        } 
    } 
  
    private void changeDirectory0(FTPClient ftpClient, String path) 
            throws IOException { 
        if (!ftpClient.changeWorkingDirectory(path)) { 
            ftpClient.makeDirectory(path); 
        } 
        ftpClient.changeWorkingDirectory(path); 
    } 
  
    private void backToRootDirectory(FTPClient ftpClient) throws IOException { 
        ftpClient.changeWorkingDirectory("/"); 
    } 
  
    private void uploadFile(FTPClient ftpClient, File file, 
            String remotePathName, String remoteName) throws Exception { 
        String localPathName = file.getAbsolutePath(); 
        FTPFile[] files = ftpClient.listFiles(remoteName); 
        if (files.length == 1) { 
            if (!ftpClient.deleteFile(remoteName)) { 
                throw new Exception("fail to delete remote file [" 
                        + remotePathName + "] before uploading"); 
            } 
        } 
        File f = new File(localPathName); 
        InputStream is = new FileInputStream(f); 
        if (!ftpClient.storeFile(remoteName, is)) { 
            is.close(); 
        } 
        is.close(); 
    } 
}

测试

import java.io.File; 
  
import org.junit.Before; 
import org.junit.Test; 
  
import com.isharec.jutils.ftp.FTPUploader; 
  
public class FTPUploaderTest { 
  
    private FTPUploader ftpUploader; 
  
    @Before 
    public void before() { 
        ftpUploader = new FTPUploader("username", "password", 
                "ip", 21); 
    } 
  
    @Test 
    public void testUploader() { 
        File f = new File("E://123.txt"); 
        try { 
            ftpUploader.upload(f, "123.txt", "/aaa/test/"); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10835.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论