【问题标题】:Empty file after upload with JAVA on my ftp server在我的 ftp 服务器上使用 JAVA 上传后的空文件
【发布时间】:2012-08-06 02:01:48
【问题描述】:

我在尝试使用 java 在我的 ftp 服务器上上传文件时遇到了一些问题。 这是我的代码功能:

public static void upload_files(String un, String pw, String ip, String f){
  try
    {
        FTPClient client = new FTPClient();
        client.connect(ip);
        client.login(un,pw);
        InputStream is = new FileInputStream(f);
        client.storeFile("test2",is);
        is.close();

    } catch(Exception e) {
        e.printStackTrace();
    }
    }

“f”是我要上传的文件的路径(即“C:\myfile”)。编译过程中没有错误,一个文件很好地发送到服务器,但遗憾的是空(0字节)。

我还注意到,即使我有一个非常好的 ISP,简单上传一些文本也需要很长时间(大约 40 秒)。

我提前感谢所有帮助我的人。

问候,

【问题讨论】:

  • 文件f是否存在?你正在传递一个我注意到的字符串。您还必须关闭 FTPClient。你用的是什么 FTPClient?
  • @ user846476 :回答你关于字符串的问题,是的,我认为这是正确的方法。当我在 Windows 资源管理器中复制它时,它会打开正确的文件,所以我猜它是正确的路径。关于第二点,我怎样才能关闭 ftp 客户端?谢谢 我该怎么做?我认为这是问题所在,是的
  • 我尝试使用“client.disconnect()”但仍然是同样的问题。可能不是好方法吧?

标签: java file upload ftp


【解决方案1】:

我认为这可能与文件传输方式有关。您可以将转移模式设置为二进制吗?有时,当您以 ASCII 格式发送数据时,它会损坏。 参考这个 https://superuser.com/questions/82726/how-to-set-binary-mode-by-default-when-ftping-to-a-remote-site

它告诉如何在 FTP 命令客户端中设置二进制模式。您将在 FTPClient 类中也有类似的规定。

刚刚发现我认为类似的问题在这里得到了回答 FTPClient - Java, upload file

【讨论】:

  • 我认为这是更相关的链接
【解决方案2】:

问题似乎与 FTPClient 的实现有关。你确定这门课是这样工作的吗?

尝试上传到不同的服务器或使用不同的类来查找失败的原因。

另外:您确定关闭 FileInputStream 是您的责任吗?我可以想象.storeFile(…) 方法在完成后会自行关闭它。

【讨论】:

  • 它不会改变任何服务器。你建议我使用哪个不同的课程?谢谢;)
  • 所以,我检查了你的第二个提案,我删除了“is.close()”。但是我仍然有一个空文件:/
  • 我试图断开上面写的变量“client”但是没有用,同样的问题......
  • 你在使用 Apache FTPClient 吗?
【解决方案3】:

在client.login ftpClient 之前添加这些行默认协议是全文,仅适用于您需要指定二进制模式的其他文件

client.enterLocalPassiveMode()
client.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE);
client.setFileTransferMode(FTP.BINARY_FILE_TYPE);

【讨论】:

    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多