1、若已经有服务端则无需自己配置,若无服务端用于测试的话,可以通过FileZilla Server配置一个服务端,具体如何下载配置 FileZilla Server可自行百度
我们这边只需要知道ip、用户名和密码;
2、连接FTP服务器
FTPClient ftpClient = new FTPClient();
public boolean connect(String ip, int port, String user, String pwd) { boolean bool = false; try { if (ftpClient.isConnected()) {//判断是否已登陆 ftpClient.disconnect(); } ftpClient.setConnectTimeout(5000); ftpClient.setDataTimeout(10000);//设置连接超时时间 ftpClient.enterLocalPassiveMode(); ftpClient.connect(ip, port); if (ftpClient.login(user, pwd)) { bool = true; } }catch (Exception e) { Log.i(TAG," --- Connect Exception: " + e.getMessage()); e.printStackTrace(); bool = false; } return bool; }
2、连接上服务端后,接下来就可以上传文件啦,代码如下
/** * * @param filePath 上传文件的路径 * @param fileName 文件名 * @return */ public boolean ftpUpload(String filePath, String desFileName) { boolean status = false; FileInputStream srcFileStream = null; try { srcFileStream = new FileInputStream(srcFilePath); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); if (ftpClient.storeFile(desFileName, srcFileStream)) { status = true; } } catch (Exception e) { status = false; e.printStackTrace(); }finally { try { if (srcFileStream != null) { srcFileStream.close(); } } catch (IOException e) { e.printStackTrace(); } } return status; }
上传过程中,有时会出现文件长时间上传但是失败的问题,这就需要我们做一个文件上传超时的判断,而FTPClient本身并没有设置文件上传超时的api,需要自己来实现,我实在上传操作前通过Handler发送一个延时信息,若在这个延时的时间段之类,文件还未上传成功的话,就判定为文件上传超时,并关闭ftpClient连接;
3、FTP上传文件后,需要关闭FTP
public void closeFTP(boolean logout) { try { if (ftpClient != null && ftpClient.isConnected()) { if(logout) { ftpClient.logout(); } ftpClient.disconnect(); } }catch (Exception e) { e.printStackTrace(); Log.i(TAG," --- closeFTP Exception : " + e.getMessage()); } }