java - Use FTP4J to resume upload progress and also get how many percent uploaded -
any 1 have example how upload ftp4j support resume , how show progress bar?
i have implemented sort of following code.
i discovered if use compressed streams, cannot rely on transferred bytes reported listener, because server can wait further data in order decode previous received blocks.
hovewer, if streams plains, in cases of lost connection still cannot rely on total transferred bytes reported listener. so, realized best way ask server how many bytes received.
in template, temporal redundancy more general , involves control connection ftp server. limit while loop data connection, i.e. upload.
ftpclient ftpclient = null; long writtenbytes; boolean iscompletedstartingdelete = false; // our policy overwrite @ first (int attempt = 0; attempt < max_attempts; attempt++) { try { ftpclient = getftpclient(); configureftpclient(ftpclient); dologin(ftpclient); ftpclient.changedirectory(remotedirectory); if (!iscompletedstartingdelete) { // our policy overwrite @ first try { ftpclient.deletefile(file); iscompletedstartingdelete = true; } catch (ftpexception e) { // maybe should check if exception thrown file not existing. iscompletedstartingdelete = true; } } try { writtenbytes = ftpclient.filesize(filename); } catch (exception e) { writtenbytes = 0; } if (ftpclient.isresumesupported()) { // template use append ftpclient.upload(file, writtenbytes, listener); } else { ftpclient.upload(file, listener); } } catch (ftpabortexception e) { // user aborted operation break; } catch (exception e) { if (attempt == max_attempts) { // or in general lastloop throw e; } else { // mask failure // log } } { if (ftpclient != null && ftpclient.isconnected()) { try { ftpclient.disconnect(); } catch (throwable t) { /* log */ } } }
Comments
Post a Comment