Java使用commons-net实现FTP文件上传
2018-07-20 来源:open-open
将文件或者图片保存在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(); } } }
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:PHP发送电子邮件类
下一篇:Java实现RC5算法
最新资讯
热门推荐