ok, I got the progress of file downloading.
1) I create two new class MyFileSystemView and MyFtpFile
public class MyFtpFile extends NativeFtpFile {
private CountingInputStream InputCount = null;
private CountingOutputStream OutputCount = null;
protected MyFtpFile (final String fileName, final File file, final User
user) {
super(fileName,file,user);
}
@Override
public OutputStream createOutputStream(long offset) throws IOException {
OutputStream outputs = super.createOutputStream(offset);
OutputCount = new CountingOutputStream(outputs);
return outputs;
}
@Override
public InputStream createInputStream(long offset) throws IOException {
InputStream ins = super.createInputStream(offset);
InputCount = new CountingInputStream(ins);
return new SwappedDataInputStream(InputCount);
}
public CountingInputStream getInputCount() {
return InputCount;
}
public CountingOutputStream getOutputCount() {
return OutputCount;
}
}
public class MyFileSystemView implements FileSystemView {
....
....
@Override
public FtpFile getFile(String file) {
// get actual file object
String physicalName = SeedFtpFile.getPhysicalName(rootDir,
currDir, file, caseInsensitive);
File fileObj = new File(physicalName);
// strip the root directory and return
String userFileName = physicalName.substring(rootDir.length() - 1);
MyFtpFile ftpfile = new MyFtpFile (userFileName, fileObj, user);
if (userFtpManager != null) { // the
userFtpManager is my own object for to mamanger the ftpfile object
userFtpManager.setFtpFile(user, ftpfile); //to save the new
ftpfile
}
return ftpfile;
}
.....
.....
}
2) inject it into the ftpserver
m_FtpServerFactory = new FtpServerFactory();
m_FtpServerFactory.setFileSystem(new MyFileSystemFactory());
3) to get progress for file downloading
userFtpManager.getDownloadPercent(User user) {
if (CurrFtpFile != null) {
CountingInputStream count = CurrFtpFile.getInputCount();
if (count != null) {
double totalSize = CurrFtpFile.getSize();
int percent = (int) (((double)(count.getByteCount()) /
totalSize) * 100L);
System.out.println(String.format("User:%s File:%s read
%d-%d percent:%d ", TerminalCode, CurrFtpFile.getName(),
count.getByteCount(), count.getCount(),percent));
return percent;
}
}
return 0;
}
thank sam
2013/6/19 Nick Yang <[email protected]>
> thank sam, I try to do it now!
>
>
> 2013/6/19 Sam Mizanin <[email protected]>
>
>> You need to have your own FileSystemView and FtpFile. In the FtpFile,
>> there are two methods createInputStream and createOutputStream. Pass your
>> own child class for inputstream and outputstream, override read and write
>> respectively and accordingly show your progress.
>>
>>
>> ________________________________
>> From: Nick Yang <[email protected]>
>> To: [email protected]
>> Sent: Wednesday, 19 June 2013, 19:55
>> Subject: Re: how can get file downloading progress?
>>
>>
>> thank you! I have been defined a ftplet class for myself already, but the
>> onDownloadEnd and onDownloadStart function can not get downloading
>> progress. My mean is to get a percent of the file downloading from
>> server. how do to it?
>>
>>
>> 2013/6/19 John Hartnup <[email protected]>
>>
>> > Look at the ftplet interface.
>> > https://cwiki.apache.org/FTPSERVER/ftplet.html
>> >
>> > Specifically the onDownloadEnd() method.
>> >
>> >
>> > On 19 June 2013 12:02, Nick Yang <[email protected]> wrote:
>> >
>> > > hello everyone, I want to design a monitor for the ftpserver. How can
>> i
>> > get
>> > > the downloading progress when the client download file from ftpserver?
>> > >
>> >
>> >
>> >
>> > --
>> > "There is no way to peace; peace is the way"
>> >
>>
>
>