【问题标题】:Any way to specify absolute paths in FTP URLs?有什么方法可以在 FTP URL 中指定绝对路径?
【发布时间】:2009-07-21 22:18:49
【问题描述】:

我正在使用 Java URL 和 URLConnection 类通过 FTP 将文件上传到服务器。除了简单地上传文件,我不需要做任何事情,所以我想避免使用任何外部库,并且我对使用不受支持的 sun.net.ftp 类持谨慎态度。

有没有办法在 FTP 连接字符串中使用绝对路径?我想把我的文件放在类似“/ftptransfers/...”的地方,但 FTP 路径是相对于用户主目录的。

示例上传代码:

URL url = new URL("ftp://username:password@host/file.txt");
URLConnection uc = url.openConnection();
uc.setDoOutput(true);
OutputStream out = uc.getOutputStream() ;
out.write("THIS DATA WILL BE WRITTEN TO FILE".getBytes());
out.close();

【问题讨论】:

    标签: java url ftp


    【解决方案1】:

    我确实发现有一种对我有用的半标准方法。

    简答:用“%2F”替换前导斜杠

    长答案:根据"A FTP URL Format" 文档:

    例如,URL“ftp://myname@host.dom/%2Fetc/motd”是 由 FTP-ing 解释为“host.dom”,以“myname”身份登录 (如果要求输入密码,则提示输入),然后执行 “CWD /etc”,然后是“RETR motd”。

    这与 “ftp://myname@host.dom/etc/motd”将是“CWD etc”,然后 “RETR 模式”;最初的“CWD”可能相对于 “myname”的默认目录。

    另一方面, “ftp://myname@host.dom//etc/motd”,将“CWD”与空 参数,然后是“CWD 等”,然后是“RETR motd”。

    【讨论】:

    • 尽管这听起来更像是利用而不是标准程序,但我确实发现这是一个非常有用的解决方案!我也不想使用任何外部库,也不想直接使用 sun.net.ftp。并且 apache commons FTPClient 不支持代理(除了系统属性),它是一个外部库。感谢您的解决方案!
    • 其实这是标准的方式。它遵循 RFC 1738 (datatracker.ietf.org/doc/rfc1738),在 FTP URL 方案的一部分中尚未过时
    【解决方案2】:

    我认为最好的办法是使用 apache commons FTP 组件,并在建立连接后执行“cd”。

    如果您愿意,您始终可以编写一个包装器,以便可以按上述格式指定 URL。

    -王牌

    【讨论】:

    • 尽管 OP 不想使用外部库,但我认为这是需要它的情况(除非他想自己实现 cd 命令,我猜他可以这样做)
    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多