当前位置: 首页 > 知识库问答 >
问题:

使用Apache Common Net FTPClient下载列出的文件时,下载的文件为空或返回的InputStream为空

祁宝
2023-03-14

我正在使用Apache Commons Net FTP库进行FTP客户端项目。我已成功登录,但当我尝试从FTP服务器下载文件时,得到了空文件或null。

我尝试设置文件传输模式或文件类型,但都不起作用。

下面是我启动客户端的代码示例:

FTPClient client = new FTPClient();
client.connect(host, port);
client.login(user, password);

这是检索文件的代码:

// I do some filtering here, only download file containing certain prefix/suffix/text
FTPFile[] file = client.listFiles(fullDirectory, (file) -> file != null && file.isFile() && file.getName().contains(fileName));
// get the real file
// this will produce file with empty content
client.retrieveFile(file.getName(), new FileOutputStream(new File(file.getName))); 

// get InputStream
// this will produce null InputStream
InputStream is = client.retrieveFileStream(file.getName()); 

我还尝试添加了一些其他属性,如:

FTPClient client = new FTPClient();
client.connect(host, port);
client.setFileType(FTP.ASCII_FILE_TYPE);
client.setFileTransferMode(FTP.BLOCK_TRANSFER_MODE);
client.login(user, password);

但都不管用。

这可能与服务器配置有关吗?实际上我没有对FTP服务器的配置访问权限。提供商只给了我对它的读取权限。

共有1个答案

左丘昕
2023-03-14

您正在列出一个特定目录(fullDirectory)。但是,您会发现,您正在从当前工作目录下载文件(没有指定完整路径)。所以可能找不到。

尝试将目录路径与文件名相结合:

fullDirectory + "/" + file.getName()

您可能正在寻找以下内容:
用Java(Apache Net Commons)下载整个FTP目录

 类似资料:
  • 在我的主要活动中: 编辑:我在主线程上运行了网络代码,它引发了一个异常。现在为下载创建一个新的线程,它将获得示例PDF(http://www.pdf995.com/samples/PDF.PDF),并将其内容放入文件中。感谢@GreenApps!

  • 我正在使用截击从AWS下载文件。文件大小约为6MB。在Android文档中提到,你不应该使用截取下载大文件。那么截击时文件大小的限制是什么。我在emulator上使用不同的网络类型和信号强度来检查我的应用程序在下载文件时的行为。我主要想检查GSM网络类型。如果我保持网络类型为GSM,即使我的信号强度很大,我也会超时。如果我的网络类型是Full或LTE,则文件下载速度非常快。对于GSM,我甚至将重试

  • 在edge中,我正在访问一个JSP页面,该页面会返回一个文件。它在chrome中工作得很好,但在Edge和Internetexplorer中,我会将mime类型附加到文件名中。 这是响应标头: Edge要求我保存文件,文件名是 persistenceIDs.xlsx.vnd.openxmlformats-officedocument.spreadsheetml.sheet 有什么想法吗?

  • 问题内容: 如何使用php将多个文件下载为zip文件? 问题答案: 您可以使用该类创建一个ZIP文件并将其流式传输到客户端。就像是: 并流式传输: 第二行强制浏览器向用户显示一个下载框,并提示名称filename.zip。第三行是可选的,但某些(主要是较旧的)浏览器在某些情况下会出现问题,而未指定内容大小。

  • 下载 <?php /** * 下载文件请求示例 */ require dirname(__DIR__) . '/vendor/autoload.php'; use Yurun\Util\HttpRequest; use Yurun\Util\YurunHttp; use Yurun\Util\YurunHttp\Handler\Swoole; $url = 'http://www.baid

  • 问题内容: 我正在尝试使用asyncTask下载文件,但无法正常工作,没有错误消息或什么都没有,只是不下载文件…我尝试了所有操作,但似乎并没有输入…任何人都知道可以是问题吗?我在手机上测试过,网址也可以。 问题答案: 我只运行了您的代码,它对我来说很好用。该图像已下载到sdcard。 请注意,请确保在AndroidManifest.xml中设置了以下权限: 这是我得到的日志(请注意,我添加了):