FTPClient - Java,上传文件

发布于 2024-11-06 05:26:07 字数 643 浏览 4 评论 0 原文

我正在尝试进行非常简单的文件上传。我想要一个 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();
    }

为什么这不起作用,如何修复它?

I'm trying to do a VERY simple file upload. I want a Java FTPClient that can upload any file I tell it to. But the pdf always gets all messed up and my pdf editor (Adobe) won't open it, saying there is an I/O error.

I'm using the following class:

    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();
    }

Why doesn't this work, and how do I fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

你在看孤独的风景 2024-11-13 05:26:07

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

It doesn't work because the default transfer mode for FTPClient is FTP.ASCII_FILE_TYPE. You just need to update the configuration to transfer in binary mode.

落墨 2024-11-13 05:26:07

将其添加到您的文件中

ftp.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE);
ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);

我对 xlsx 文件也遇到了同样的问题,这是一个很好的解决方案。

Add this to your file

ftp.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE);
ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);

I had the same problem with xlsx files and this was a good solution.

归属感 2024-11-13 05:26:07

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

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

It's often forgotten that FTP has two modes of operation - one for text files and the other for binary (image) files. In the good old days, connecting from a command line ftp client, we'd carefully remember to set the transfer mode before requesting a file - or we'd run into exactly the sort of problem you seem to be having. Today a lot of situations seem to default to binary, but not apparently yours.

You probably need to tell your ftp implementation to transfer in binary/image mode.

人间不值得 2024-11-13 05:26:07

尝试使用 BufferedInputStream,这是一个 (工作)代码示例:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
res = client.storeFile("File Name", bis);
bis.close();
client.logout();

Try to use BufferedInputStream, this is a (working) code sample:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
res = client.storeFile("File Name", bis);
bis.close();
client.logout();
聽兲甴掵 2024-11-13 05:26:07

来自 文档

此方法不会关闭给定的
输入流。

因此,在调用 logout() 之前关闭 FileInputStream

From documentation

This method does NOT close the given
InputStream.

So close the FileInputStream before calling logout()

夜巴黎 2024-11-13 05:26:07

试试这个。

objFtpClient.setFileType(FTP.BINARY_FILE_TYPE);

objFtpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);

objFtpClient.enterLocalPassiveMode();

Try this.

objFtpClient.setFileType(FTP.BINARY_FILE_TYPE);

objFtpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);

objFtpClient.enterLocalPassiveMode();
度的依靠╰つ 2024-11-13 05:26:07

对我来说,只有 ftp.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE) 有效,而当我使用 ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE) 文件时,文件已损坏。

For Me only ftp.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE) worked, while when I was using ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE) File was getting corrupt.

一向肩并 2024-11-13 05:26:07

这看起来像是Commons NET 库中的一个错误,它影响了 3.0 版本。尝试更新版本 (3.0.1),它修复了该错误。

This looks like a bug in the Commons NET library, which affected version 3.0. Try a newer version (3.0.1), which fixed the bug.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文