2011-03-31 115 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