2011-03-31 117 views

回答

3

我意识到这是一个老问题,但希望其他人会发现这个有用:

​​是一个“轻量级二郎FTP客户端”我们一直在生产中使用该lhttpcdlhttpc仿照在过去6个月左右。

它不是非常有据可查的权利,但在这里是用test.rebex.net一个例子:

1> lftpc:start(). 
ok 
2> {ok, {_, _, Socket}} = lftpc:connect("test.rebex.net", 21, []). 
{ok,{undefined,{220,[<<"FTP on test.rebex.net ready...">>]}, 
       <0.65.0>}} 
3> lftpc:login(Socket, [{username, <<"demo">>}, {password, <<"password">>}], infinity, []). 
{ok,[{undefined,{331,[<<"Password required for demo.">>]}, 
       undefined}, 
    {undefined,{230,[<<"User demo logged in.">>]},undefined}]} 
4> lftpc:cd(Socket, <<"pub">>, infinity, []). 
{ok,{undefined,{250, 
       [<<"CWD command successful. \"/pub\" is current directory.">>]}, 
       undefined}} 

默认情况下,没有用于控制或数据连接解码器。所以,当我们列出包含2个文件的目录:exampletest我们回来:

5> lftpc:nlist(Socket, infinity, []). 
{ok,{{150, 
     [<<"Data connection accepted from 173.198.175.141:53504; transfer starting.">>]}, 
    {226,[<<"Transfer ok.">>]}, 
    [<<"example\r\ntest\r\n">>]}} 

我们可以指定一个data_decoder

6> lftpc:nlist(Socket, infinity, [{partial_download, []}, {data_decoder, lftpc_format:nlst_decoder()}]). 
{ok,{{150, 
     [<<"Data connection accepted from 127.0.0.1:54359; transfer starting.">>]}, 
    {226,[<<"Transfer ok.">>]}, 
    [[<<"example">>,<<"test">>]]}} 

我们也可以指定partial_download以块的形式接收数据:

7> {ok, {_, Download}} = lftpc:nlist(Socket, infinity, [{partial_download, []}, {data_decoder, lftpc_format:nlst_decoder()}]). 
{ok,{{150, 
     [<<"Data connection accepted from 127.0.0.1:54403; transfer starting.">>]}, 
    <0.86.0>}} 
8> receive {data_part, Download, Data} -> Data end. 
[<<"example">>,<<"test">>] 
9> receive {ftp_eod, Download, Message} -> Message end. 
{226,[<<"Transfer ok.">>]} 

看看主要的src/lftpc.erl文件,有high-levellow-level功能取决于您的需求。你总是可以下降到lftpc:request/3,4,5,6lftpc:start_transfer/3做任何自定义。

2

你可能会也可能不会发现这个有用的,但我可以解释我们为我们的项目做了什么。我们特别需要在Erlang中使用sftp,并发现它有问题,并且与某些服务器配置不兼容。我们最终用Java编写了一个简单的ftp/sftp客户端,使用jsch,并使用JInterface将它连接到Erlang。我们浪费了几天的时间试图与Erlang的ftp实现作斗争并使其工作,但最终在几个小时内最终用JInterface开发和测试了Java实现。祝你好运。

http://www.jcraft.com/jsch/

+0

不幸的是,我无法在这个项目中添加对Java的依赖。否则会尝试。 – 2011-03-31 14:57:44

+0

是的,理解。祝你好运。 – 2011-03-31 15:21:39