问题标签 [apache-commons-net]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 将 FTP 代理与 apache commons-net 一起使用
我想使用带有 Apache 的 commons-net 的代理服务器建立一个 FTP 连接。
但是看看这个FTPClient 是否支持通过 FTP 代理服务器进行 FTP 连接?让我担心。
我必须干预系统属性,Sun 文档声明“如果指定了socksProxyHost,那么所有 TCP 套接字都将使用 SOCKS 代理服务器建立连接或接受一个连接。”
什么?所有 TCP 套接字?我的数据库连接呢?或者我可能想在不使用代理的情况下同时打开其他 FTP 连接?他们都会受到影响吗?
有没有其他方法可以不影响我的应用程序的其余部分?
java - 检测或阻止 Commons Net FTPClient 阻止读取
我正在使用 Commons NetFTPClient
类定期轮询 ftp 站点并尝试下载文件。有时线程在尝试从站点读取时会无限期阻塞,我想知道是否有其他人遇到过这个问题并且可以提供任何解决方法?
我正在使用FTPClient
'sretrieveFileStream(String)
方法获取 InputStream 的句柄,然后我尝试从中读取。下面是被阻塞线程的部分堆栈跟踪。
ant - Ant telnet 挂在一个简单的任务上
那是我在 build.xml 文件中的代码。当我运行 ant(版本 1.8,在 bash 中)时(我已经下载并复制了 commons-net-2.0 和 jakarta-oro-2.0.8 的 jars),这是我得到的输出:
然后它就坐在那里。当我在服务器上执行“谁”时,我可以看到“系统”正在等待登录。但这之后没有任何进展。我可以使用普通的远程登录方式(putty、bash 等)远程登录到服务器。
我什至尝试了完整的 telnet 命令而不是读/写:
任何帮助深表感谢!
Note: JRE 1.5, Ant 1.8, commons-net version 2.0, jakarta version 2.0.8
ant - ant ftp 不下载子目录中的文件
我正在尝试使用 ant 从 ftp 服务器下载子目录中的文件。确切的文件集是已知的。其中一些位于子目录中。Ant似乎只下载根目录中的那些。如果我下载所有文件而不列出它们,它确实有效。
第一个 ftp 操作应该与第二个操作完全相同。相反,我得到“假定不是符号链接的隐藏文件 \\a\a.txt”。
有谁知道这里有什么问题?这是 ant FTP 任务中的错误吗?
更新:我向 Commons Net jira https://issues.apache.org/jira/browse/NET-324发布了一个关于此的错误
更新:我在 ant bugreport 系统中添加了一个 bugreport https://issues.apache.org/bugzilla/show_bug.cgi?id=49296
java - 使用 apache commons-net FTPClient 传输原始二进制文件?
更新:已解决
FTPClient.setFileType()
我在登录之前打电话,导致 FTP 服务器使用默认模式 ( ASCII
),无论我将其设置为什么。另一方面,客户端表现得好像文件类型已正确设置。BINARY
模式现在完全按预期工作,在所有情况下都按字节传输文件。我所要做的就是在wireshark 中嗅探一下流量,然后使用netcat 模拟FTP 命令以查看发生了什么。为什么我前两天没有想到!?谢谢大家的帮助!
我有一个 utf-16 编码的 xml 文件,我使用 apache 的 commons-net-2.0 java 库的 FTPClient 从 FTP 站点下载该文件。它提供对两种传输模式的支持:ASCII_FILE_TYPE
和BINARY_FILE_TYPE
,不同之处在于ASCII
它将用适当的本地行分隔符替换行分隔符('\r\n'
或者只是'\n'
-- 十六进制,0x0d0a
或者只是0x0a
)。我的问题是:我有一个 utf-16 编码的测试文件,其中包含以下内容:
<?xml version='1.0' encoding='utf-16'?>
<data>
<blah>blah</blah>
</data>
这是十六进制:
0000000: 003c 003f 0078 006d 006c 0020 0076 0065 .<.?.x.m.l. .v.e
0000010: 0072 0073 0069 006f 006e 003d 0027 0031 .r.s.i.o.n.=.'.1
0000020: 002e 0030 0027 0020 0065 006e 0063 006f ...0.'. .e.n.c.o
0000030: 0064 0069 006e 0067 003d 0027 0075 0074 .d.i.n.g.=.'.u.t
0000040: 0066 002d 0031 0036 0027 003f 003e 000a .f.-.1.6.'.?.>..
0000050: 003c 0064 0061 0074 0061 003e 000a 0009 .<.d.a.t.a.>....
0000060: 003c 0062 006c 0061 0068 003e 0062 006c .<.b.l.a.h.>.b.l
0000070: 0061 0068 003c 002f 0062 006c 0061 0068 .a.h.<./.b.l.a.h
0000080: 003e 000a 003c 002f 0064 0061 0074 0061 .>...<./.d.a.t.a
0000090: 003e 000a
.>..
当我ASCII
对此文件使用模式时,它会正确地逐字节传输;结果具有相同的 md5sum。伟大的。当我使用传输模式时,除了将字节从 an 洗牌到 anBINARY
之外什么都不做,结果是换行符 ( ) 被转换为回车符 + 换行符对 ( )。这是二进制传输后的十六进制:InputStream
OutputStream
0x0a
0x0d0a
0000000: 003c 003f 0078 006d 006c 0020 0076 0065 .<.?.x.m.l. .v.e
0000010: 0072 0073 0069 006f 006e 003d 0027 0031 .r.s.i.o.n.=.'.1
0000020: 002e 0030 0027 0020 0065 006e 0063 006f ...0.'. .e.n.c.o
0000030: 0064 0069 006e 0067 003d 0027 0075 0074 .d.i.n.g.=.'.u.t
0000040: 0066 002d 0031 0036 0027 003f 003e 000d .f.-.1.6.'.?.>..
0000050: 0a00 3c00 6400 6100 7400 6100 3e00 0d0a ..<.d.a.t.a.>...
0000060: 0009 003c 0062 006c 0061 0068 003e 0062 ...<.b.l.a.h.>.b
0000070: 006c 0061 0068 003c 002f 0062 006c 0061 .l.a.h.<./.b.l.a
0000080: 0068 003e 000d 0a00 3c00 2f00 6400 6100 .h.>....<./.d.a.
0000090: 7400 6100 3e00 0d0a
t.a.>...
它不仅转换换行符(它不应该),而且它不尊重 utf-16 编码(不是我希望它知道它应该,它只是一个愚蠢的 FTP 管道)。如果不进行进一步处理以重新对齐字节,则结果是不可读的。我只会使用ASCII
模式,但我的应用程序也将在同一管道中移动真实的二进制数据(mp3 文件和 jpeg 图像)。在这些二进制文件上使用BINARY
传输模式还会导致它们在其内容中注入随机s,由于二进制数据通常包含合法序列0x0d
,因此无法安全删除。0x0d0a
如果我ASCII
对这些文件使用模式,那么“聪明”0x0d0a
0x0a
我想我的问题是(是):有没有人知道任何用于 java 的好的 FTP 库只是将该死的字节从那里移动到这里,或者我将不得不破解 apache commons-net-2.0 并维护我自己的 FTP 客户端代码只是为了这个简单的应用程序?有没有其他人处理过这种奇怪的行为?任何建议,将不胜感激。
我检查了 commons-net 源代码,它看起来不像BINARY
是使用模式时奇怪行为的原因。但是InputStream
它从 in 模式中读取的BINARY
只是一个java.io.BufferedInptuStream
包裹在一个 socketInputStream
上。这些较低级别的 java 流是否做过任何奇怪的字节操作?如果他们这样做了,我会感到震惊,但我看不出这里还会发生什么。
编辑1:
这是一段模仿我下载文件的最小代码。要编译,只需执行
要运行,您需要目录 /tmp/ascii 和 /tmp/binary 以将文件下载到,以及设置有文件的 ftp 站点。代码还需要配置适当的 ftp 主机、用户名和密码。我将文件放在我的测试 ftp 站点上的 test/ 文件夹下,并调用文件 test.xml。测试文件至少应该多于一行,并且是 utf-16 编码的(这可能不是必需的,但有助于重现我的确切情况)。:set fileencoding=utf-16
我打开一个新文件后使用了vim的命令,输入了上面引用的xml文本。最后,要运行,只需执行
代码:
(注意:此代码修改为使用自定义 FTPClient 对象,链接在下面的“编辑 2”下)
编辑2:
好的,我听从了CheckedXputStream
建议,这是我的结果。我制作了 apache 的 call 的副本FTPClient
,并将 the和 theMyFTPClient
都包装在using校验和中。此外,我包装了我提供的以将输出存储在带有校验和的文件中。MyFTPClient 的代码发布在这里,我已经修改了上面的测试代码以使用这个版本的 FTPClient(试图发布一个 gist URL 到修改后的代码,但我需要 10 个信誉点才能发布多个 URL!),结果是:SocketInputStream
BufferedInputStream
CheckedInputStream
CRC32
FileOutputStream
FTPClient
CheckOutputStream
CRC32
test.xml
test.mp3
这基本上是零意义,因为这里是相应文件的 md5sum:
我不知所措。我发誓我在这个过程中的任何时候都没有改变文件名/路径,并且我已经对每一步都进行了三次检查。它一定很简单,但我不知道下一步该往哪里看。出于实用性的考虑,我将继续调用 shell 进行我的 FTP 传输,但我打算继续这样做,直到我了解到底发生了什么。我会用我的发现更新这个帖子,我会继续感谢任何人可能做出的任何贡献。希望这在某些时候对某人有用!
java - 如何使用 FTP 在 Java 中的一次调用中创建具有多个级别的目录
我正在使用 Apache 的 FTPClient 库,但无法找到一种简单的方法来创建一个深度超过一层的新目录。我错过了什么吗?
假设我的远程主机上已经存在目录/tmp,下面的命令成功创建/tmp/xxx
但以下失败:
在后一种情况下,甚至 /tmp/yyy 都不会创建。
我知道我可以创建/tmp/yyy,然后创建/tmp/yyy/zzz,但我不知道如何直接创建/tmp/yyy/zzz。
我错过了一些明显的东西吗?使用 mkd 而不是 makeDirectory 没有帮助。
此外,如果目录 /tmp/yyy/zzz/ 不存在,是否可以在一次调用中将文件上传到 /tmp/yyy/zzz/test.txt?
java - Apache Commons Net FTP 正在上传损坏的文件
我正在尝试使用 Apache Commons Net 进行 FTP 文件传输。
问题是文件间歇性地到达服务器损坏。'损坏'是指 WinRAR 告诉我一个 ZIP 文件有一个'Unexpected end of archive'。有时文件完全是空的。我注意到对于较大的文件 (100kb+) 会发生这种情况,但对于小文件 (20kb) 也会发生这种情况。
我知道上传的源 zip 文件是有效的,并且只有 243kb。
我没有从代码中得到任何错误/异常。
这是正在执行的代码:
和一些日志:
请注意,所有这些都在 15 秒内完成,并且服务器上的所有生成文件都已损坏。
我也没有设置任何超时进行了测试,问题仍然存在。
java - FTP 连接在“LIST”上“挂起”
全部,
我有一个远程 ftp 服务器的问题,它让我忙了三天,现在我要疯了。:(
前段时间,我写了一个使用 apache commons-net 2.0 的简单 ftp 检索器类。该类在 5 个不同的 ftp 服务器上运行良好,我可以根据需要检索数据。现在我遇到了一个我需要连接的服务器,它不允许我列出目录或检索数据。
这是我的班级发送和检索的命令的顺序:
在最后一行,我的代码无限期挂起(好吧,我在等待 2 小时后将其杀死,看看它会阻塞多长时间)。我已经尝试了一切,从使用活动连接到设置 ASCII 类型到使用不同的 ftp 库 - 总是得到相同的结果。
通常,我只会打电话给这些人并告诉他们他们的服务器配置不正确。但是,通过 FileZilla 进行连接不仅可以工作,而且速度极快,而且不会引起任何问题。此外,通过 linux 上的命令行连接就像一个魅力。
我完全迷失在这里。有人知道我为什么会遇到这个问题吗?
干杯
java - 公共网络 ftp 问题
我面临一个问题,我的 FTP 连接似乎是正确的并且没有收到错误,但文件没有放在 ftp 服务器上。
我正在使用 commons-net-ftp。
代码:
日志文件跟踪:
2010-10-12 10:57:53,527 INFO [STDOUT] 230 登录成功
2010-10-12 10:57:53,527 INFO [STDOUT] PASV
2010-10-12 10:57:53,576 INFO [STDOUT] 227 进入被动模式 (216,27,89,17,10,231)
2010-10-12 10:57:53,624 信息 [STDOUT] STOR SharperImageFeed2.txt
2010-10-12 10:57:53,681 信息 [STDOUT] 150"/SharperImageFeed2.txt " 文件准备好以 ASCII 模式接收
2010-10-12 10:57:54,337 INFO [STDOUT] 226 传输成功完成。
2010-10-12 10:57:54,337 INFO [STDOUT] QUIT
2010-10-12 10:57:54,384 INFO [STDOUT] 221 Windows FTP 服务器(WFTPD,由 Texas Imperial Software 提供)说再见
关于问题是什么的任何建议?有什么可以运行的测试吗?
我可以使用 FileZilla ftp 和上传文件。
进行进一步测试时,当我从本地开发环境运行时,我能够执行成功的 FTP 放置 - 这是 Windows (Eclipse/JBoss) 但是,当从生产服务器 (Linux/JBoss) 运行 FTP 时,跟踪表明它成功,但 FTP 服务器上没有放置任何内容。
ant - 在 Maven 中通过 Ant FTP 任务上传文件
我正在尝试使用 Ant 任务上传文件。如果我直接使用 Ant 文件会被上传,但是如果我通过 Maven 调用 ant 任务(使用maven-antrun-plugin
)我会收到以下错误:
发生 Ant BuildException:执行此行时发生以下错误:
ant-commonsnet.jar 显然对 Ant 可用:
Ant 类路径是为 maven-antrun-plugin 单独定义的,还是我遗漏了什么?