FTPClient - progres uploadu pliku

Odpowiedz Nowy wątek
2011-08-05 16:17
samara
0

Witam.
Używam klasy FTPClient do przesłania pliku na serwer FTP, przykładowy kod:

FTPClient ftpClient = new FTPClient(); 
ftpClient.connect(host);
ftpClient.login(user, password);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
 
FileInputStream fis = new FileInputStream(filePath);
ftpClient.storeFile(fileName, fis);
fis.close();
ftpClient.logout();
ftpClient.disconnect();

Chciałbym zliczyć ilość wysłanych bajtów (aby móc określić ile procent pliku zostało przesłane). Czytałem o CountingInputStream (http://www.discursive.com/boo[...]rence/guava-io-sect-measuring), jednak w przykładzie na stronie w przypadku CountingInputStream ilość bajtów jest pobierana dopiero po przesłaniu ich do serwera, a ja chciałbym móc to robić w trakcie przesyłania. Natknąłem się też na klasę ProgressMonitorInputStream, ale ona z tego co zrozumiałem wyświetla okno dialogowe, a nie o to mi chodzi.
Podsumowując moje pytanie brzmi: jak mogę na bieżąco odczytywać ilość bajtów wysłanych do serwera przez FTPClient?

Pozostało 580 znaków

2011-08-07 22:13
0

Możesz przecież użyć listenera
setCopyStreamListener(CopyStreamListener e)

interfejs CopyStreamListener posiada metodę :

void bytesTransferred(long totalBytesTransferred,
int bytesTransferred,
long streamSize)
This method is not part of the JavaBeans model and is used by the static methods in the org.apache.commons.io.Util class for efficiency. It is invoked after a block of bytes to inform the listener of the transfer.
Parameters:
totalBytesTransferred - The total number of bytes transferred so far by the copy operation.
bytesTransferred - The number of bytes copied by the most recent write.
streamSize - The number of bytes in the stream being copied. This may be equal to CopyStreamEvent.UNKNOWN_STREAM_SIZE if the size is unknown.

myślę że o to Ci choidzi

Pozostało 580 znaków

2011-08-09 23:43
samara
0

Dzięki za odpowiedź, w końcu poradziłem sobie z tym inaczej - w klasie CountingInputStream przy pomocy anonimowej klasy przesłoniłem metodę afterRead i tam zliczam bajty (co prawda są to bajty odczytane z dysku, a nie te wysłane, ale to mi wystarczy :))

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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