FTPClient - nie działa appendFile()

0

Nie wiem czy to odpowiedni dział ale w sumie aplikacja jest na androida( Kotlin) :-)
Wysyłam na ftp plik.txt, a następnie coś tam do niego dopisuję(appendFile).
Wygląda to z grubsza tak:

val client = FTPClient()
if (login) {
              client.appendFile("sedziowie" + ".txt", it)
           }

Jeśli pliku nie ma, program go tworzy i zapisuje w nim wysłane dane.
Następnie po ponownym wysłaniu danych nic się nie dzieje. W tym sensie że nie zostają one dopisane do pliku.
Problem wystąpił po zmianie serwera na nowszy ;-)
Na starym hulało, a na nowym nie chce.
Doczytałem że trzeba dodatkowo ustawić uprawnienia do tego pliku ( 755 ).

Próbuje to zrobić w ten sposób:

val client = FTPClient()

client.sendSiteCommand("chmod " + "755" + "sedziowie.txt");
client.appendFile("sedziowie" + ".txt", it)

Niestety to nic nie zmienia.
Prośba o jakąś podpowiedź.

1

Dwie uwagi:

  1. Tak dla formalności napiszę: robienie tego przez plik tekstowy to mocna prowizorka, tutaj aż się prosi o zastosowanie jakiegoś SQL, nawet najprostszego
  2. Co do zmiany uprawnień - nie uważasz, że w ten sposób to by była wielka podatność? W sensie - jeśli rzeczywiście to uprawnienia są problemem i z jakiegoś powodu masz zablokowane pewne rzeczy, a Ty się łączysz z serwerem jako klient i sobie sam zdejmujesz/poprawiasz zabezpieczenia :D

Odnośnie pkt.2 - czy jak się łączysz innym klientem, to działa? Skoro piszesz, że dawniej było OK, ale od czasu wymiany serwera są problemy, to raczej szukałbym problemu nie w kliencie, który na tym serwerze dokonuje zapisu, ale właśnie w konfiguracji/uprawnieniach serwera i/lub usera, który się z tym serwerem łączy.

0

Tak dla formalności napiszę: robienie tego przez plik tekstowy to mocna prowizorka, tutaj aż się prosi o zastosowanie jakiegoś SQL, nawet najprostszego

Ja to wiem ale Ty nie wiesz w którym ja jestem miejscu i że SQL to dla mnie następny krok.:-)

Co do zmiany uprawnień - nie uważasz, że w ten sposób to by była wielka podatność?

Uważam, ale takie info dostałem od admina servera, że to kwestia uprawnień klienta ftp...więc szukam.
Zresztą po coś chyba jest ten sendSiteCommand i inne set.permission.

czy jak się łączysz innym klientem, to działa?

Łączę się tym samym klientem, zmienia się tylko miejsce położenia plików ( inny server).
Innym klientem ( oczywiście te same dane logowania ) np. przez Total Commandera, z plikami mogę robić co tylko chcę.
Zresztą znalazłem podobnego posta z takim problemem.
link

Jeszcze myślę, że może mam zainstalowaną jakąś starszą wersję FTPcilent,a...robiłem sporo prób na samym początku.

Wygląda że jest najnowszy: implementation files('t:/jar/commons-net-3.8.0.jar')

Tak to wygląda w build.gradle

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation "androidx.compose.ui:ui:$compose_version"
    implementation "androidx.compose.material:material:$compose_version"
    implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
    implementation 'androidx.activity:activity-compose:1.4.0'
    implementation files('t:/jar/commons-net-3.8.0.jar')
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
    debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"

    //Hilt
    implementation "androidx.hilt:hilt-navigation-compose:1.0.0"
    implementation "com.google.dagger:hilt-android:2.40"
    debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
    kapt "com.google.dagger:hilt-compiler:2.40"

    def nav_version = "2.4.2"
    implementation "androidx.navigation:navigation-compose:$nav_version"

}

Jak zmienię na

client.storeFile("sedziowie" + ".txt", it)

to normalnie działa, czyli nadpisuje nową zawartość.

EDIT
Założyłem jeszcze konto na jakimś darmowym serwerze i śmiga.

2

Założyłem jeszcze konto na jakimś darmowym serwerze i śmiga.

No to tym bardziej - potwierdza się to, co napisałem wcześniej: nie szukaj problemu w swojej aplikacji, tylko na serwerze. Jeśli przed zmianą działało, teraz nie działa, na innym serwerze działa - raczej problem nie jest w Twojej apce :P

2
Waran3 napisał(a):

Tak dla formalności napiszę: robienie tego przez plik tekstowy to mocna prowizorka, tutaj aż się prosi o zastosowanie jakiegoś SQL, nawet najprostszego

Ja to wiem ale Ty nie wiesz w którym ja jestem miejscu i że SQL to dla mnie następny krok.:-)

Każda godzina poświęcona na ftp jest godziną zmarnowaną. jeszcze nie wiesz, co strzeli z flanki (na pewno współbieżność, i wiele innych)
każda godzina poświęcona na utrwalanie prowizorki kosztuje kilka godzin.

1

A Ty przetrzymujesz dane do logowania do FTP w aplikacji? Jak tak, to weź pod uwagę, że ktoś zdekompiluje apke i będzie mieć credentiale. Wtedy można wrzucać jak sie leci :D aż do zasrania serwera

0

to pytanie nie ma nic wspólnego z Androidem, popytaj na kanałach Java/JVM.

0

Wyszło na to, że serwer ma coś tam wyłączone, ze względu na bezpieczeństwo...zmieniłem serwer - działa :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1