1.ftp依赖

看Android版本使用

compile 'commons-net:commons-net:3.5'
implementation 'commons-net:commons-net:3.5'

2.废话不多说,直接先上写的一个工具类

public class FTPUtils {    private static final String TAG = "FTPClientFunctions";    private FTPClient ftpClient = null; // FTP客户端    SharedPreferences preferences = XLApplication.getContext().getSharedPreferences("setting", Context.MODE_PRIVATE);    private String ip;    private String port;    private String username;    private String password;    /**     * 连接到FTP服务器     *     * @return 是否连接成功     */    public boolean ftpConnect(Context context) {        try {            username = "anonymous";            password = "https://blog.csdn.net";            ip = preferences.getString("ftp_ip", XLApplication.getContext().getString(R.string.access_ip));            port = preferences.getString("ftp_port", XLApplication.getContext().getString(R.string.ftp_port));            ftpClient = new FTPClient();            Log.e(TAG, "connecting to the ftp server " + ip + " :" + port);            ftpClient.connect(ip, Integer.parseInt(port));            // 根据返回的状态码,判断链接是否建立成功            if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {                Log.e(TAG, "login to the ftp server");                boolean status = ftpClient.login(username, password);                /*                 * 设置文件传输模式                 * 避免一些可能会出现的问题,在这里必须要设定文件的传输格式。                 * 在这里我们使用BINARY_FILE_TYPE来传输文本、图像和压缩文件。                 */                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);                ftpClient.enterLocalPassiveMode();                return status;            }        } catch (Exception e) {            e.printStackTrace();            Log.e(TAG, "Error: could not connect to host " + ip);            //此处应有提示            //ToastUtil.show((PostAlarmActivity)context,"FTP服务器连接失败");        }        return false;    }    /**     * 断开ftp服务器连接     *     * @return 断开结果     */    public boolean ftpDisconnect() {        // 判断空指针        if (ftpClient == null) {            return true;        }        // 断开ftp服务器连接        try {            ftpClient.logout();            ftpClient.disconnect();            return true;        } catch (Exception e) {            Log.d(TAG, "Error occurred while disconnecting from ftp server.");        }        return false;    }    /**     * ftp 文件上传     *     * @param srcFilePath  源文件目录     * @param desFileName  文件名称     * @return 文件上传结果     */    public boolean ftpUpload(String srcFilePath, String desFileName) {        boolean status = false;        try {            FileInputStream srcFileStream = new FileInputStream(srcFilePath);            status = ftpClient.storeFile(desFileName, srcFileStream);            srcFileStream.close();            return status;        } catch (Exception e) {            e.printStackTrace();            Log.d(TAG, "upload failed: " + e.getLocalizedMessage());        }        return status;    }}

经过自己的多次调试终于调通了,那么我在这里主要给大家说几个坑吧,可能大家在调试也会出现的情况

1.IP和端口就不说了,根据自己的工程进行修改就行了,那么重点就要说下这个用户名和密码的问题了,刚开是和FTP搭建的人员调试的时候,说的是没有用户名和密码,所以开始我就没有传这两个字段,但是老是调试不通,通过查资料才确定ftp是有默认用户名的anonymous,所以在没有用户名和密码的时候请用默认用户名,然后就是密码也必须随便填一个,不能传空字符,不然可能还是不会通。

3.调用代码

new Thread(new Runnable() {                @Override                public void run() {                    // TODO 可以首先去判断一下网络                    FTPUtils ftpClient = new FTPUtils();                    boolean connectResult = ftpClient.ftpConnect(PostAlarmActivity.this);                    if (connectResult) {                        boolean uploadResult = ftpClient.ftpUpload(url, VIDEO_UPLOAD_FILE + name);                        if (uploadResult) {                            Log.w(TAG, "上传成功");                            boolean disConnectResult = ftpClient.ftpDisconnect();                            if (disConnectResult) {                                Log.e(TAG, "关闭ftp连接成功");                                runOnUiThread(new Runnable() {                                    @Override                                    public void run() {                                        submit(url, name, 1);                                    }                                });                            } else {                                Log.e(TAG, "关闭ftp连接失败");                            }                        } else {                            Log.w(TAG, "上传失败");                            runOnUiThread(new Runnable() {                                @Override                                public void run() {                                    ToastUtil.show(PostAlarmActivity.this, "视频上传失败");                                }                            });                        }                    } else {                        Log.w(TAG, "连接ftp服务器失败");                    }                }            }).start();
public static final String VIDEO_UPLOAD_FILE = "./";

这里的url就是文件源文件路劲,然后这个调用这里也有一个坑,就是这个文件名称是指你要上传的位置,这里前面必须指定上传的文件目录加上你要保存的文件名,"./"表示根目录,name是文件名,如果要上传指定目录,只要确保FTP服务器有就OK了。

更多相关文章

  1. Android SDK 在线更新镜像服务器资源
  2. Android Android使用JSON与服务器交互
  3. android、ios与服务器端php使用rsa加密解密通讯
  4. Android客户端向服务器端发送数据的流程(1)
  5. android 实现图片上传功能 Tomcat作为服务器
  6. RTC搭建android下三层应用程序访问服务器MsSql-客户端
  7. 转:RTC搭建android下三层应用程序访问服务器MsSql-客户端
  8. Java大文件上传(Android亦可)

随机推荐

  1. Android(安卓)API Level与sdk版本对照表
  2. Android(安卓)Studio 添加已有工程方法
  3. AssetBundle
  4. android 手机获取外置SD卡路径
  5. 如何开发 native-activity 工程【详细注
  6. Android中广播优先级设置
  7. android小功能实现之拨打电话
  8. Cordova 插件 plugin.xml 文件配置
  9. 2-20 Android(安卓)简单MediaPlayer编写(
  10. android ndk中使用gprof