4

我使用以下代码将照片上传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();
      }
    }
  }
}
4

5 回答 5

2

从未听说过这种类型的损坏,但是:您是从防火墙后面上传的吗?client.enterLocalPassiveMode();在调用之前尝试做storeFile

于 2011-05-22T16:42:56.473 回答
2

这是在最新版本的库中解决的已知错误:http:
//commons.apache.org/net/changes-report.html#a3.0.1

于 2011-06-24T11:00:31.200 回答
0

我刚刚在我的本地计算机上尝试了您的代码,它可以工作。我没有看到任何灰线。

所以我想这要么是 Femi 建议的被动模式,要么是一些网络/防火墙/较低级别的问题。

于 2011-05-22T18:36:44.430 回答
0

可能迟到了,但它可以帮助某人避免浪费时间。

检查conf文件和许可证!!在 Unix 中使用 vsftp 检查

write_enable=YES

保持取消评论。

与其他 FTP 客户端确认是否可以上传文件。

于 2013-04-30T22:07:55.867 回答
0

FTP 文件发送不是原子的,这意味着如果连接崩溃,则只发送部分文件。我会在文件发送结束时提供添加更改名称以了解传输何时完成。

于 2016-12-12T08:25:34.250 回答