Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208533
  • 博文数量: 39
  • 博客积分: 1057
  • 博客等级: 准尉
  • 技术积分: 926
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-27 20:13
文章分类

全部博文(39)

文章存档

2012年(24)

2011年(15)

分类: 系统运维

2012-08-07 11:05:05

Erlang的库很丰富,今天去翻了一下,发现inets下的ftp模块,提供完整的ftp客户端功能,默认以被动模式传输文件,失败的话,会自动尝试主动传输模式。ftp的作用很多,比如我在godday上的空间,就是通过ftp发布我的博客或者网站的内容的。
与perl/python应用仓库里面提供的的ftp 包/模块 相比,真的一点不差,这里只是一个抛砖引玉的例子:

点击(此处)折叠或打开

  1. -module(webput).
  2. -doc([{author, 'Joe Armstrong'},
  3.       {title, "Publish data on a web site"},
  4.       {keywords,[web,www,home,page,publish]},
  5.       {date, 981112}]).
  6.  
  7. -export([publish/5]).
  8.  
  9. publish(Host, User, Password, LocalDir, RemoteDir) ->
  10.     case ftp:open(Host) of
  11.     {ok, Pid} -
  12.         case ftp:user(Pid, User, Password) of
  13.         ok ->
  14.             case ftp:cd(Pid, RemoteDir) of
  15.             ok ->
  16.                 case file:list_dir(LocalDir) of
  17.                 {ok, Files} ->
  18.                     lists:foreach(fun(I) ->
  19.                            publish(I, LocalDir, Pid)
  20.                        end, Files);
  21.                 {error, _} ->
  22.                     exit({bad,local,directory, LocalDir})
  23.                 end;
  24.             {error, Reason} ->
  25.                 exit({cannot,cd,to,RemoteDir,reason,Reason})
  26.             end;
  27.         {error, Reason} ->
  28.             exit({cannot, login, as, User, reason, Reason})
  29.         end;
  30.     {error, Reason} ->
  31.         exit({cannot,connect,to,Host, reason, Reason})
  32.     end.
  33. publish(File, Dir, Pid) ->
  34.     LocalFile = Dir ++ "/" ++ File,
  35.     case ftp:send(Pid, LocalFile, File) of
  36.     ok ->
  37.         ok;
  38.     {error, Reason} ->
  39.         exit({cannot,send,file,File,reason,Reason})
  40.     end.

这里通过:
 ftp:open(Host) 打开到ftp主机的链接,下面就可以进行认证授权,返回值也是一个erlang风格的{ok, Pid},这里之后就可以通过Pid这个进程id进行ftp的操作了,比如改变目录,查看目录,上传下载,这些方法在代码里面都很详细的演示了,这个例子能很好的表现了erlang的哲学 “一切皆进程”!
编译之后,在erlang shell 中就可以使用了:

点击(此处)折叠或打开

  1. >webput:publish("bingo.baz.dobedo.se","jimbo23","waX2p34",
  2.            "/home/joe/html/mirror",
  3.            "/pub/acct2754/html").
  4. ok
   根据publish的方法的参数,我们明白如何使用了。
介绍这个例子的目的,一个是展示erlang丰富强大的库,另外就是欣赏地道的erlang编程风格之美,希望你喜欢。
例子出处位于:


阅读(2336) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~