Android FTPServer监听摄像机文件上传处理

Android 手机开启FTPServer服务,设置用户信息密码等,服务的ip地址就是本地的ip地址
摄像机在通信里面选择FTP方式,然后连接可以

implementation 'commons-net:commons-net:3.8.0'
implementation 'org.apache.ftpserver:ftpserver-core:1.1.1'
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
}


public class FTPLogin2Aty extends AppCompatActivity {
    private EditText textName,textIp,textPwd;
    private Button btnLink;
    private FtpServer mFtpserver;
    private String filePath;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ftplogin_aty);
        initView();
        initData();
    }
    private void initView(){
        textIp = findViewById(R.id.address_ip);
        textName = findViewById(R.id.address_name);
        textPwd = findViewById(R.id.address_pwd);
        btnLink = findViewById(R.id.address_btn);
        btnLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LinkServer();
            }
        });
    }

    private void initData() {
//        String albumPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutepath();
//        File internalStoragePath = getFilesDir();
//        filePath = internalStoragePath.getAbsolutePath();
        String albumPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
        filePath = albumPath;
    }

    private void LinkServer(){
        try {
            startFtpserverNew(getIpAddress());
        }catch (Exception e){

        }
    }

    private String getIpAddress(){
        try {
            List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
            for(NetworkInterface networkInterface:interfaces){
                List<InetAddress> addresses = Collections.list(networkInterface.getInetAddresses());
                for(InetAddress inetAddress : addresses){
                    if(!inetAddress.isLoopbackAddress()){
                        String strAddress = inetAddress.getHostAddress().toLowerCase();
                        boolean isIPV4 = Isipv4(strAddress);
                        if(isIPV4){
                            return strAddress;
                        }
                    }
                }
            }
        }catch (Exception e){

        }
        return null;
    }

    private boolean Isipv4(String ipv4){
        if (TextUtils.isEmpty(ipv4)){
            return false;
        }
        String [] parts = ipv4.split("\\.");
        if(parts.length!=4){
            return false;
        }
        for(String part:parts){
            try {
                int n = Integer.parseInt(part);
                if(n<0 || n>255){
                    return false;
                }
            }catch (Exception e){
                return false;
            }
        }
        return true;
    }

    private static final int PORT = 1234;
    //192.168.31.105
    private void startFtpserver(String hostip){
        try {
            textIp.setText(hostip);
            FtpServerFactory serverFactory = new FtpServerFactory();
            ListenerFactory factory = new ListenerFactory();
            serverFactory.addListener( "default", factory.createListener());
            factory.setPort(PORT);
            factory.setServerAddress(hostip);
            serverFactory.addListener( "default", factory.createListener());
            // 设置FTP服务器配置

            File fileDir = new File(filePath+"/directory"); // 指定存放文件的目录路径
            if (!fileDir.exists()) {
                fileDir.mkdirs();
            }
            BaseUser user = new BaseUser();
            user.setName("at");
            user.setPassword("");
            user.setEnabled(true);
            user.setMaxIdleTime(3000);
            user.setHomeDirectory(fileDir.getAbsolutePath()); // 设置默认目录为文件存放目录
            List<Authority> authorities = new ArrayList<>();
            authorities.add(new WritePermission());
            user.setAuthorities(authorities);
            serverFactory.getUserManager().save(user);
            // 配置服务器被操作的命令等回复信息,下面详细介绍

            Map<String, Ftplet> ftplets = new HashMap<>();
            ftplets.put("miaFtplet",new FTPLogin2Aty.MyFtpLet());
            serverFactory.setFtplets(ftplets);
            if(mFtpserver != null){
                mFtpserver.stop();
            }
            mFtpserver = serverFactory.createServer();
            mFtpserver.start();

            Toast.makeText(FTPLogin2Aty.this,"开启服务",Toast.LENGTH_SHORT).show();
//            FtpFile homeDirectory = serverFactory.getFileSystem().createFileSystemView(user).getHomeDirectory();
//            Toast.makeText(FTPLoginAty.this,homeDirectory.getAbsolutePath(),Toast.LENGTH_SHORT).show();
        }catch (Exception e){
            Log.e("111",e.getMessage());
        }

    }

    public class MyFtpLet extends DefaultFtplet {

        @Override
        public FtpletResult beforeCommand(FtpSession session, FtpRequest request) throws FtpException, IOException {
            return super.beforeCommand(session, request);
        }

        @Override
        public FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply) throws FtpException, IOException {
            Log.e("11111",reply.getMessage());
            return super.afterCommand(session, request, reply);
        }

        /**
         * 上传开始的状态应答,客户端开启上传过程之前的最后一次应答。
         */
        @Override
        public FtpletResult onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
            return super.onUploadStart(session, request);
        }

        @Override
        public FtpletResult onUploadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
            Log.e("11111","post end");
            return super.onUploadEnd(session, request);
        }
    }

    private FtpServer mFtpServerNew;
    private void startFtpserverNew(String hostip){
        try {
            textIp.setText(hostip);
            if (null != mFtpServerNew) {
                stop();
            }
            File fileDir = new File(filePath+"/directory"); // 指定存放文件的目录路径
            textName.setText(filePath+"/directory");
            if (!fileDir.exists()) {
                fileDir.mkdirs();
            }
            FtpServerFactory ftpServerFactory = new FtpServerFactory();
            // 配置FTP用户信息文件
            PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
            UserManager userManager = userManagerFactory.createUserManager();
            // 账户信息(也可以新增用户)
//            BaseUser user = (BaseUser) userManager.getUserByName("at");
            BaseUser user = new BaseUser();
            user.setName("at");
            user.setHomeDirectory(filePath+"/directory");
            user.setPassword("1234");
            List<Authority> authorities = new ArrayList<>();
            authorities.add(new WritePermission());
            user.setAuthorities(authorities);
            userManager.save(user); // 修改账户信息

            ListenerFactory listenerFactory = new ListenerFactory();
            // replace the default listener
            listenerFactory.setPort(PORT);
            listenerFactory.setServerAddress(hostip);
            ftpServerFactory.addListener("default", listenerFactory.createListener());
            ftpServerFactory.setUserManager(userManager);
            // 配置服务器被操作的命令等回复信息,下面详细介绍
            Map<String, Ftplet> ftplets = new HashMap<>();
            ftplets.put("miaFtplet",new FTPLogin2Aty.MyFtpLet());
            ftpServerFactory.setFtplets(ftplets);
            mFtpServerNew = ftpServerFactory.createServer();
            mFtpServerNew.start();
            Toast.makeText(FTPLogin2Aty.this,"开启服务",Toast.LENGTH_SHORT).show();
        }catch (Exception e){

        }
    }

    public void stop() {
        if (null != mFtpServerNew && !mFtpServerNew.isStopped()) {
            mFtpServerNew.stop();
        }
        mFtpServerNew = null;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(mFtpserver!=null){
            mFtpserver.stop();
            mFtpserver = null;
        }
    }
}

参考文章:Android搭建Ftp服务器监听文件传输状态_ftpserver.user.admin.idletime-CSDN博客

Android设备FTP服务器搭建_android 搭建ftp服务器接收文件-CSDN博客

FTP错误代码列表(ftp状态码、ftp错误码)_ftp 230-CSDN博客

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Slyar FTPServer是一个功能强大的FTP服务器软件,它提供了多种上传文件的方法。 首先,你需要在Slyar FTPServer的设置中配置FTP账户和权限。登录到Slyar FTPServer的管理界面,选择“用户”或“账户”选项,创建一个账号并设置相应的权限,确保账户具有文件上传的权限。 然后,你可以使用FTP客户端软件连接到Slyar FTPServer。打开FTP客户端,输入Slyar FTPServer的IP地址和端口号,以及你之前创建的账户和密码,点击连接。 连接成功后,你可以在FTP客户端的本地文件夹中选择要上传的文件。在FTP客户端界面上一般有一个“上传”或“上传文件”的按钮,点击它。 接下来,你需要指定要将文件上传到Slyar FTPServer的路径。这可以是Slyar FTPServer的根目录,或者是某个特定的文件夹。在FTP客户端界面上,你可以浏览到你想要上传文件的目录,在目录上右键点击并选择“上传”或“将文件上传到此处”。 上传文件可能需要一些时间,具体时间取决于文件大小和网络连接状况。一旦文件上传完成,你将在FTP客户端上收到上传成功的提示。 需要注意的是,上传文件之前,你可能需要对Slyar FTPServer进行相应的配置,例如设置最大上传文件大小限制或者设置文件上传速度限制,以保证服务器的安全和稳定运行。 总之,Slyar FTPServer可以通过FTP客户端软件来上传文件。连接到Slyar FTPServer,选择要上传的文件,指定上传目录,等待上传完成即可。 ### 回答2: Slyar FTP Server 是一种用于建立和管理 FTP 服务器的工具。要上传文件到 Slyar FTP Server,可以按照以下步骤进行操作: 1. 首先打开 Slyar FTP Server。确保服务器已经启动并正常运行。 2. 在客户端中,打开一个支持 FTP 协议的应用程序,例如 FileZilla 或者 Windows 资源管理器。 3. 在 FTP 客户端中,输入 Slyar FTP Server 的 IP 地址和端口号。如果是在本地使用,可以输入“localhost”作为 IP 地址。默认的 FTP 端口号为 21,可以根据需要进行调整。 4. 输入用户名和密码,以登录到 Slyar FTP Server。确保提供的用户名和密码与 Slyar FTP Server 配置文件中设置的相匹配。 5. 成功登录后,FTP 客户端将会显示 Slyar FTP Server 上的服务器文件列表。可以在本地电脑的文件夹中找到要上传的文件。 6. 在 FTP 客户端中,浏览到要上传文件的目标文件夹。可以使用 FTP 客户端提供的导航工具,导航到正确的目标文件夹。 7. 在 FTP 客户端中,选择要上传的文件。这可以通过单击文件名或者使用鼠标拖放的方式来完成。 8. 在选中要上传的文件后,可以通过右键单击并选择 "Upload" 或者 "Send" 来将文件上传到 Slyar FTP Server。 9. 上传的进度将显示在 FTP 客户端的界面上,可以根据文件大小和网络速度来估计上传的时间。 10. 完成后,可以在 Slyar FTP Server 上的目标文件夹中找到已经上传的文件。 通过上述步骤,就可以使用 Slyar FTP Server 成功上传文件。请注意,确保服务器的设置和连接正确,以及提供正确的登录凭据,都是成功上传文件的关键。 ### 回答3: Slyar FTP服务器是一款免费的FTP服务器软件,用于在计算机之间进行文件传输。以下是使用Slyar FTP服务器上传文件的步骤: 1. 首先,您需要下载并安装Slyar FTP服务器软件,并进行必要的配置。在配置文件中,您可以设置FTP服务器的监听IP地址、端口号以及允许访问的用户等信息。 2. 运行Slyar FTP服务器,并确保FTP服务器处于运行状态。您可以在任务管理器或者系统托盘中查看Slyar FTP服务器的运行状态。 3. 启动一个支持FTP协议的客户端软件,例如FileZilla、CuteFTP等,并连接到Slyar FTP服务器。在客户端软件中,需要输入正确的服务器IP地址、端口号、用户名和密码等登录信息。 4. 成功连接到Slyar FTP服务器后,您可以在客户端软件的界面中看到服务器上的文件和文件夹列表。在本地文件夹中,选择您要上传的文件。 5. 在客户端软件中,找到上传文件的功能按钮或选项,并点击上传文件。根据客户端软件的不同,可能需要选择上传文件的路径和目标文件夹。 6. 等待文件上传完成。这可能需要一段时间,取决于文件的大小和网络连接的速度。 7. 一旦上传完成,您可以在Slyar FTP服务器的文件目录中看到刚刚上传的文件。您还可以在客户端软件中进行相应的操作,例如重命名、移动或者删除文件。 通过以上步骤,您可以使用Slyar FTP服务器上传文件。请注意确保FTP服务器的配置和网络连接的稳定性,以确保文件传输的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_zxw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值