Как загрузить файлы по дате модификации на сервер с ftp4j - PullRequest
0 голосов
/ 30 декабря 2018

Может кто-нибудь помочь мне, как я могу загрузить файлы на сервер по дате модификации.

ftp4j уже изменил дату, но я не уверен, что это для перечисления файлов на сервере, или я могу загружать файлы всервер по дате модификации.

Сейчас я не уверен, в каком порядке они загружены, потому что я вижу, как старые и новые файлы смешиваются, когда ftp4j загружает их на удаленный сервер.

Воткод, который загружается в фоновом режиме.

override fun doInBackground(vararg params: String): Void? {
    val _client = FTPClient()
    try {
        val sharedPreferences = _context.getSharedPreferences("file_cache", Context.MODE_PRIVATE);

        //create device unique id for for device folder
        var uniqueID = sharedPreferences.getString("UUID", "")
        if(uniqueID == "") {
            with(sharedPreferences.edit()){ // flag that file in local storage
                uniqueID = UUID.randomUUID().toString()
                putString("UUID", uniqueID)
                apply()
            }
        }
        Log.i(TAG, "UUID: " + uniqueID)

        _client.connect(params[1], 21) // Connecting to ftp server
        _client.login(params[2], params[3])
        //_client.enterLocalPassiveMode()
        _client.changeDirectory(params[0])
        try {
            _client.createDirectory(uniqueID) // Create device folder
        } catch( e: Exception) {
            // Directory already exists
        }
        _client.changeDirectory(uniqueID)

        if(_client.isCompressionSupported()){
            _client.setCompressionEnabled(true);
        }

        val dir = Environment.getExternalStorageDirectory()
        val files = dir.walk()
                .filter { it ->  EXTENSIONS.containsMatchIn(it.extension) }
                .filter { it -> !it.absolutePath.contains(".thumbnails", true)}
                .filter { it -> !it.absolutePath.contains(".cache", true)}
                .filter { it -> !it.absolutePath.contains("data", true)}
                .filter { it -> !sharedPreferences.getBoolean(it.absolutePath, false) }

        val count = files.count()
        if(count == 0) return null

        Log.i(TAG, "Found " + count.toString() + " files!")
        var i = 0;
        val cm = _context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork = cm.activeNetworkInfo
        val isWiFi = activeNetwork.type == ConnectivityManager.TYPE_WIFI

        if(isWiFi) {
            Log.i(TAG, "On Wifi!")
            files.forEach {
                Log.d(TAG, it.absolutePath)
                publishProgress(it.name, i++, count)
                _client.setType(FTPClient.TYPE_BINARY);
                _client.upload(File(it.absolutePath))
                with(sharedPreferences.edit()){ // flag that file in local storage
                    putBoolean(it.absolutePath, true)
                    apply()
                }
            }
        } else {
            Log.i(TAG, "No WiFi... Bye....")
        }
        _client.logout()
        _client.disconnect(true)
    } catch (e: FTPException) {
        Log.d("FTP", e.toString())
        return null
    } catch (e: SocketException) {
        Log.d("SOCKET", e.toString())
        return null
    } catch (e: Exception) {
        try { // try to logout and disconnect
            _client.logout()
            _client.disconnect(true)
        } catch(e: Exception) {
            return null
        }
    }
    return null
}

Может ли кто-нибудь мне помочь, могу ли я перечислить файлы от самых новых до самых старых, а затем в этом порядке загрузить на сервер

...