当前位置: 首页 > 面试题库 >

Apache Commons Net FTP正在上传损坏的文件

空慈
2023-03-14
问题内容

我正在尝试使用Apache Commons Net进行FTP文件传输。

问题是文件间歇性到达服务器损坏。通过“腐败”我的意思是的WinRAR告诉我一个ZIP文件有一个“意外结束
存档”。有时文件是完全空的。我注意到,这种
情况在较大的文件(100kb +)上发生的更多,但是在较小的文件
(20kb)上也会发生。

我知道一个事实,即正在上传的源zip文件是有效的,并且
只有243kb。

我没有从代码中得到任何错误/异常。

这是正在执行的代码:

int CON_TIMEOUT = (int) TimeUnit.SECONDS.toMillis(20); // fail if can't connect within 20 seconds
int LIVE_TIMEOUT = (int) TimeUnit.MINUTES.toMillis(5); // allow up to 5 minutes for data transfers

FTPClient client = new FTPClient();
client.setConnectTimeout(CON_TIMEOUT);
client.setDataTimeout(LIVE_TIMEOUT);
client.connect(host);
client.setSoTimeout(LIVE_TIMEOUT);
client.login(user, pass);
client.changeWorkingDirectory(dir);
log("client ready");

File file = new File(filePath);
String name = new Date().getTime() + "-" + file.getName();

InputStream fis = null;
try
{
    fis = new FileInputStream(file);
    if (!client.storeFile(name, fis))
        throw new RuntimeException("store failed");
    log("store " + name + " complete");
}
finally
{
    IOUtils.closeQuietly(fis);
    try
    {
        client.logout();
        log("logout");
    }
    catch (Throwable e)
    {
        log("logout failed", e);
    }
    try
    {
        client.disconnect();
        log("disconnect");
    }
    catch (Throwable e)
    {
        log("disconnect failed", e);
    }
}

and some logs:

2010-08-10 21:32:38 client ready
2010-08-10 21:32:49 store 1281439958234-file.zip complete
2010-08-10 21:32:49 logout
2010-08-10 21:32:49 disconnect
2010-08-10 21:32:50 client ready
2010-08-10 21:33:00 store 1281439970968-file.zip complete
2010-08-10 21:33:00 logout
2010-08-10 21:33:00 disconnect
2010-08-10 21:33:02 client ready
2010-08-10 21:33:11 store 1281439982234-file.zip complete
2010-08-10 21:33:11 logout
2010-08-10 21:33:11 disconnect
2010-08-10 21:33:15 client ready
2010-08-10 21:33:25 store 1281439995890-file.zip complete
2010-08-10 21:33:26 logout
2010-08-10 21:33:26 disconnect
2010-08-10 21:33:27 client ready
2010-08-10 21:33:36 store 1281440007531-file.zip complete
2010-08-10 21:33:36 logout
2010-08-10 21:33:36 disconnect
2010-08-10 21:33:37 client ready
2010-08-10 21:33:48 store 1281440017843-file.zip complete
2010-08-10 21:33:48 logout
2010-08-10 21:33:48 disconnect
2010-08-10 21:33:49 client ready
2010-08-10 21:33:59 store 1281440029781-file.zip complete
2010-08-10 21:33:59 logout
2010-08-10 21:33:59 disconnect
2010-08-10 21:34:00 client ready
2010-08-10 21:34:09 store 1281440040812-file.zip complete
2010-08-10 21:34:09 logout
2010-08-10 21:34:09 disconnect
2010-08-10 21:34:10 client ready
2010-08-10 21:34:23 store 1281440050859-file.zip complete
2010-08-10 21:34:24 logout
2010-08-10 21:34:24 disconnect
2010-08-10 21:34:25 client ready
2010-08-10 21:34:35 store 1281440065421-file.zip complete
2010-08-10 21:34:35 logout
2010-08-10 21:34:35 disconnect

请注意,所有这些操作均在15秒内完成,并且
服务器上的所有结果文件均已损坏。

我也进行了测试,未设置任何超时,问题仍然存在。


问题答案:

Commons FTP默认为Ascii文件类型。在
处理二进制数据(例如ZIP文件)时,您希望将其设置为Binary 。

来自
http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html

FTPClient的默认设置是使用FTP.ASCII_FILE_TYPE,
FTP.NON_PRINT_TEXT_FORMAT,FTP.STREAM_TRANSFER_MODE和
FTP.FILE_STRUCTURE。直接支持的唯一文件类型是
FTP.ASCII_FILE_TYPE和FTP.BINARY_FILE_TYPE。

您想要setFileType(FTP.BINARY_FILE_TYPE)在发送文件之前先做。



 类似资料:
  • 问题内容: 我编写了一个代码,用于在文件中保存少量图像,然后压缩该文件并上传到ftp服务器。当我从服务器下载该文件时,很少有文件可用,并且很少有文件损坏。可能是什么原因呢?压缩代码或上载程序代码是否有故障。 压缩代码: } FTP上传代码: 问题答案: 确保传输BINARY_FILE_TYPE中的文件。也许返回假? 顺便说一句,如果您以ASCII模式传输zip,几乎肯定会导致损坏。

  • 问题内容: 我使用Eclipse在Windows 7中创建了一个jar文件。当我尝试打开jar文件时,它说jar文件无效或损坏。谁能建议我为什么jar文件无效? 问题答案: 当您在Windows资源管理器中双击一个JAR文件时,会发生这种情况,但是JAR本身实际上不是 可执行的 JAR。真正的可执行JAR至少应具有带有方法的类,并在中引用它。 在Eclispe中,您需要将项目导出为 Runnabl

  • 我正在使用Dropzone.js将文件上传到Azure云存储桶中。 这些文件正在上传到bucket,但当我下载它们时,它们已经损坏了。 我到处都找过了。我没有上传在块,一切似乎都在那里,但无论什么类型的文件我上传,它是破坏与我重新下载它。

  • 我正在使用apache poi,我创建了一个HSSF工作簿,并尝试打开一个xlsx文件。但当我用excel打开时,它显示文件已损坏。这是我的密码。

  • 问题内容: 我尝试使用以下代码将Blob字段使用的pdf文件上载。 这段代码没有错误地执行,并且数据库显示了blob内容,但是当我尝试使用以下代码检索文件时,它给出了一个无法打开的损坏文件。 它输出的文件大小与原始文件大小相同,但文件没有打开。该阅读器被触发,但不能打开该文件,并给出了一个错误“的文件被损坏或不支持的文件类型” 问题答案: 嗯…经过一点调试后,我发现上载的代码很麻烦,并最终找到了正

  • 问题内容: 我相信这是从一个片段 **androidsnippets.org -这是为什么不funcioning在Android 2.3** ?如何解决? 错误 我找到了关于该主题的几个答案,但找不到 解决 该 问题 的合适方法,添加了 NoPadding 参数或其他 算法 或..? 问题答案: 这是BouncyCastle的问题(升级到1.45时BouncyCastleAES错误)。 我发现这导