FTPClient - Java,上传文件

Cod*_*Guy 25 java ftp ftp-client apache-commons-net

我正在尝试做一个非常简单的文件上传.我想要一个可以上传我告诉它的任何文件的Java FTPClient.但pdf总是搞砸了,我的pdf编辑器(Adobe)不会打开它,说有一个I/O错误.

我正在使用以下课程:

    import org.apache.commons.net.ftp.FTPClient;
    ....

    FTPClient client = new FTPClient();
    FileInputStream fis = null;

    try {
        client.connect("mydomain.com");
        client.login("user", "password");

        String filename = "myPDF.pdf";
        fis = new FileInputStream(filename);

        client.storeFile("temp.pdf", fis);
        fis.close();
        client.logout();
    } catch (IOException e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用,我该如何解决?

An̲*_*rew 27

它不起作用,因为FTPClient的默认传输模式是FTP.ASCII_FILE_TYPE.您只需要更新配置以在二进制模式下传输.

  • 以二进制模式传输:`ftp.setFileType(FTP.BINARY_FILE_TYPE)` (3认同)

小智 24

将其添加到您的文件中

ftp.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE);
ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);
Run Code Online (Sandbox Code Playgroud)

我对xlsx文件有同样的问题,这是一个很好的解决方案.

  • 我不认为你想要像这样调用setFileTransferMode - 根据JavaDoc它只需要使用FTP.*_ TRANSFER_MODE常量. (4认同)
  • -1,这个答案是错误的,浪费了我的时间。只有 ftp.setFileType(FTP.BINARY_FILE_TYPE); 是必需的,你把第二个参数 ftp.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE) 文件损坏了(带有 pdf 和 xls ) (2认同)

Chr*_*ton 10

人们经常忘记FTP有两种操作模式 - 一种用于文本文件,另一种用于二进制(图像)文件.在过去的好日子里,从命令行ftp客户端连接,我们会仔细记住在请求文件之前设置传输模式 - 或者我们遇到了你似乎遇到的那种问题.今天很多情况似乎默认为二进制,但显然不是你的.

您可能需要告诉您的ftp实现以二进制/图像模式传输.