【问题标题】:Empty file uploaded to ftp server上传到ftp服务器的空文件
【发布时间】:2012-01-04 04:43:40
【问题描述】:

我正在使用 apache 的 FTP 客户端将文件上传到 ftp 服务器。但问题是代码没有抛出异常,但上传的文件是空的。这可能是什么原因。 我上传了两次相同的文件,但名称不同,如下所示。

    ftpClient.storeFile(fileDir+"//"+"actualFileName", inputStream));
    ftpClient.storeFile(fileDir+"//"+"differentFileName", inputStream));

【问题讨论】:

  • 您不是在以文本模式上传二进制文件,是吗?
  • 我有要上传的文件的 InputStream 并且我已将文件类型设置为 FTPClient 的二进制文件
  • 贴出你写的上传文件的代码,它可以帮助其他人识别逻辑是否有错误。
  • 在写入第二个文件之前是否重新打开/重新创建/重置输入流?
  • 没有。不支持 AND 重置。

标签: java apache ftp


【解决方案1】:

我认为它是第二个最终为空的文件。您应该为第二次更新重新创建 inputStream(根据 DRCB 的评论),否则它将是空的(它会在第一次上传时用完)。

【讨论】:

  • 是否有一些 wat 可以保留输入流,因为它无法重新创建。
  • 您可以将 InputStream 复制到一个字节数组中(使用 commons-io 在一行中执行此操作)并使用 ByteArrayInputStream 作为 storeFile 的源。
【解决方案2】:

备注:“//”好像有点奇怪,不应该是“/”吗?

您使用相同的 inputStream 重复 storeFile,这将被读到最后。 InputStream 有一个读取位置。因此,第二个文件肯定是空的。也不要忘记close()输入流不要丢失文件句柄。

【讨论】:

    最近更新 更多