2011-03-31 16 views
6

के लिए वैकल्पिक एफ़टीपी क्लाइंट लाइब्रेरी ओटीपी लाइब्रेरी में httpc के अलावा एरलांग के लिए कम से कम दो HTTP क्लाइंट लाइब्रेरीज़ हैं (जो आमतौर पर छोटी गाड़ी और गुंजाइश के रूप में माना जाता है): ibrowse और lhttpc। क्या ftp के समान विकल्प हैं?एरलांग

उत्तर

3

मुझे पता है यह एक पुराने सवाल है, लेकिन उम्मीद है कि दूसरों को मिलेगा इस उपयोगी:

lftpc एक "हल्के Erlang एफ़टीपी क्लाइंट" lhttpc और dlhttpc के बाद मॉडलिंग की है जो हम उत्पादन में उपयोग किया गया है है पिछले 6 महीनों के लिए या तो।

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}} 

डिफ़ॉल्ट रूप से, कोई नियंत्रण नहीं या डेटा कनेक्शन के लिए किया डिकोडर देखते हैं:

यह बहुत अच्छी तरह अभी दर्ज नहीं किया है, लेकिन यहां एक उदाहरण test.rebex.net का उपयोग कर रहा है। तो जब हम 2 फ़ाइलों वाला कोई निर्देशिका की सूची: example और test हम वापस मिल:

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:

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 निर्दिष्ट कर सकते हैं

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-level और 01 हैंआपकी आवश्यकताओं के आधार पर कार्य करता है। कुछ भी कस्टम करने के लिए आप हमेशा lftpc:request/3,4,5,6 और lftpc:start_transfer/3 पर जा सकते हैं।

2

आपको यह उपयोगी मिल सकता है या नहीं, लेकिन मैं समझा सकता हूं कि हमने अपनी परियोजना के लिए क्या किया। हमें विशेष रूप से एरलांग में sftp का उपयोग करने की आवश्यकता है, और इसे कुछ सर्वर कॉन्फ़िगरेशन के साथ छोटी और असंगत पाया गया। हमने jsch का उपयोग करके जावा में एक साधारण ftp/sftp क्लाइंट लिखना समाप्त कर दिया, और इसे JInterface का उपयोग करके एरलांग से कनेक्ट करने के लिए उपयोग किया। हमने एरलांग के एफटीपी कार्यान्वयन से लड़ने और इसे काम करने की कोशिश करने में कुछ दिन बर्बाद कर दिए, लेकिन आखिरकार जावा में जेन्टरफेस के साथ कुछ घंटों में एक कार्यान्वयन का विकास और परीक्षण समाप्त हो गया। सौभाग्य।

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

+0

दुर्भाग्य से, मैं इस परियोजना के लिए जावा पर निर्भरता नहीं जोड़ सकता। अन्यथा कोशिश की होगी। –

+0

हाँ, समझा। सौभाग्य। –