Re: how can get file downloading progress?

2013-06-19 Thread John Hartnup
Look at the ftplet interface. https://cwiki.apache.org/FTPSERVER/ftplet.html

Specifically the onDownloadEnd() method.


On 19 June 2013 12:02, Nick Yang yr.n...@gmail.com 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


Re: how can get file downloading progress?

2013-06-19 Thread Nick Yang
thank sam, I try to do it now!


2013/6/19 Sam Mizanin sammyuglykid...@yahoo.com

 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 yr.n...@gmail.com
 To: ftpserver-users@mina.apache.org
 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 john.hart...@gmail.com

  Look at the ftplet interface.
  https://cwiki.apache.org/FTPSERVER/ftplet.html
 
  Specifically the onDownloadEnd() method.
 
 
  On 19 June 2013 12:02, Nick Yang yr.n...@gmail.com 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
 



Re: how can get file downloading progress?

2013-06-19 Thread Nick Yang
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 yr.n...@gmail.com

 thank sam, I try to do it now!


 2013/6/19 Sam Mizanin sammyuglykid...@yahoo.com

 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 yr.n...@gmail.com
 To: ftpserver-users@mina.apache.org
 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 john.hart...@gmail.com

  Look at the ftplet interface.
  https://cwiki.apache.org/FTPSERVER/ftplet.html
 
  Specifically the onDownloadEnd() method.
 
 
  On 19 June 2013 12:02, Nick Yang yr.n...@gmail.com 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