FTPClient (общая сеть) Проблема с загрузкой - PullRequest
3 голосов
/ 22 мая 2011

Я использую следующий фрагмент кода для загрузки фотографии на хост ftp . Но фотография кажется поврежденной после загрузки: Внизу фотографии узкие серые линии.

Размер серых линий можно уменьшить, уменьшив размер буфера объекта FTPClient.

import java.io.File;
import java.io.FileInputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPReply;
import sun.misc.Cleaner;

public class FtpConnectDemo1 {

  public static void main(String[] args) {
    FTPClient client = new FTPClient();

    try {
      client.connect("ftp.ftpsite.com");

      //
      // When login success the login method returns true.
      //
      boolean login = client.login("user@ftpsite.com", "pass");

      if (login) {
        System.out.println("Login success...");

        int replay = client.getReplyCode();

        if (FTPReply.isPositiveCompletion(replay)) {
          File file = new File("C:\\Users\\e.behravesh\\Pictures\\me2_rect.jpg");
          FileInputStream input = new FileInputStream(file);
          client.setFileType(FTP.BINARY_FILE_TYPE);

          if (!client.storeFile(file.getName(), input)) {
            System.out.println("upload failed!");
          }          

          input.close();
        }
        //
        // When logout success the logout method returns true.
        //
        boolean logout = client.logout();
        if (logout) {
          System.out.println("Logout from FTP server...");
        }
      } else {
        System.out.println("Login fail...");
      }

    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        //
        // Closes the connection to the FTP server
        //
        client.disconnect();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

Ответы [ 5 ]

2 голосов
/ 24 июня 2011

это известная ошибка, исправленная в новейшей версии библиотеки:
http://commons.apache.org/net/changes-report.html#a3.0.1

2 голосов
/ 22 мая 2011

Никогда не слышал о коррупции такого типа, но: вы загружаете из-за брандмауэра?Попробуйте сделать client.enterLocalPassiveMode(); перед вызовом storeFile.

0 голосов
/ 12 декабря 2016

Отправка файла FTP не является атомарной, что означает, что в случае сбоя в соединении был отправлен только частичный файл. я бы предложил добавить имя изменения, чтобы знать, когда передача будет завершена в конце отправки файла.

0 голосов
/ 01 мая 2013

возможно поздно, но это может помочь кому-то избежать потери времени.

Проверьте файл конфигурации и разрешения !! В Unix с использованием vsftp убедитесь, что

write_enable = ДА

оставайтесь без комментариев.

Уточните у другого FTP-клиента возможность загрузки файлов.

0 голосов
/ 22 мая 2011

Я только что попробовал ваш код на моем локальном компьютере, и он работает.Я не видел серых линий.

Так что я полагаю, что это либо пассивный режим, как предлагает Феми, либо какая-то проблема с сетью / брандмауэром / более низким уровнем.

...