Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FTP4J恢复上载进度,并获取上载的百分比_Java_Ftp - Fatal编程技术网

Java 使用FTP4J恢复上载进度,并获取上载的百分比

Java 使用FTP4J恢复上载进度,并获取上载的百分比,java,ftp,Java,Ftp,任何人都有关于如何使用支持恢复的ftp4j上传以及如何显示进度条的示例吗?我刚刚实现了以下代码 我发现,如果使用压缩流,就不能依赖侦听器报告的传输字节,因为服务器可以等待进一步的数据来解码以前接收到的块 Hovewer,即使流是平坦的,在某些连接丢失的情况下,您仍然不能依赖侦听器报告的总传输字节数。所以,我最终意识到,最好的方法是询问服务器它收到了多少字节 在我的模板中,时间冗余更一般,涉及到与FTP服务器的控制连接。您可以将while循环限制为数据连接,即上载 FTPClient ftpCli

任何人都有关于如何使用支持恢复的ftp4j上传以及如何显示进度条的示例吗?

我刚刚实现了以下代码

我发现,如果使用压缩流,就不能依赖侦听器报告的传输字节,因为服务器可以等待进一步的数据来解码以前接收到的块

Hovewer,即使流是平坦的,在某些连接丢失的情况下,您仍然不能依赖侦听器报告的总传输字节数。所以,我最终意识到,最好的方法是询问服务器它收到了多少字节

在我的模板中,时间冗余更一般,涉及到与FTP服务器的控制连接。您可以将while循环限制为数据连接,即上载

FTPClient ftpClient = null;
long writtenBytes;
boolean isCompletedStartingDelete = false; // Our policy is overwrite at first
for (int attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
   try {
      ftpClient = getFTPClient();
      configureFtpClient(ftpClient);
      doLogin(ftpClient);  
      ftpClient.changeDirectory(remoteDirectory);

      if (!isCompletedStartingDelete) { // Our policy is overwrite at first
         try {
             ftpClient.deleteFile(file);
             isCompletedStartingDelete = true;
         } catch (FTPException e) {
             // Maybe you should check if this exception is really thrown for file not existing.
             isCompletedStartingDelete = true;
         }
      }

      try { 
         writtenBytes = ftpClient.fileSize(fileName);
      } catch (Exception e) { 
         writtenBytes = 0;
      }

      if (ftpClient.isResumeSupported()) {
         // With this template you also could 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
      }
   } finally {
      if (ftpClient != null && ftpClient.isConnected()) {
         try { ftpClient.disconnect(); } catch (Throwable t) { /* LOG */ } 
   }  
}