Erlang的库很丰富,今天去翻了一下,发现inets下的ftp模块,提供完整的ftp客户端功能,默认以被动模式传输文件,失败的话,会自动尝试主动传输模式。ftp的作用很多,比如我在godday上的空间,就是通过ftp发布我的博客或者网站的内容的。
与perl/python应用仓库里面提供的的ftp 包/模块 相比,真的一点不差,这里只是一个抛砖引玉的例子:
- -module(webput).
- -doc([{author, 'Joe Armstrong'},
- {title, "Publish data on a web site"},
- {keywords,[web,www,home,page,publish]},
- {date, 981112}]).
-
- -export([publish/5]).
-
- publish(Host, User, Password, LocalDir, RemoteDir) ->
- case ftp:open(Host) of
- {ok, Pid} ->
- case ftp:user(Pid, User, Password) of
- ok ->
- case ftp:cd(Pid, RemoteDir) of
- ok ->
- case file:list_dir(LocalDir) of
- {ok, Files} ->
- lists:foreach(fun(I) ->
- publish(I, LocalDir, Pid)
- end, Files);
- {error, _} ->
- exit({bad,local,directory, LocalDir})
- end;
- {error, Reason} ->
- exit({cannot,cd,to,RemoteDir,reason,Reason})
- end;
- {error, Reason} ->
- exit({cannot, login, as, User, reason, Reason})
- end;
- {error, Reason} ->
- exit({cannot,connect,to,Host, reason, Reason})
- end.
- publish(File, Dir, Pid) ->
- LocalFile = Dir ++ "/" ++ File,
- case ftp:send(Pid, LocalFile, File) of
- ok ->
- ok;
- {error, Reason} ->
- exit({cannot,send,file,File,reason,Reason})
- end.
这里通过:
ftp:open(Host) 打开到ftp主机的链接,下面就可以进行认证授权,返回值也是一个erlang风格的{ok, Pid},这里之后就可以通过Pid这个进程id进行ftp的操作了,比如改变目录,查看目录,上传下载,这些方法在代码里面都很详细的演示了,这个例子能很好的表现了erlang的哲学 “一切皆进程”!
编译之后,在erlang shell 中就可以使用了:
- >webput:publish("bingo.baz.dobedo.se","jimbo23","waX2p34",
- "/home/joe/html/mirror",
- "/pub/acct2754/html").
- ok
根据publish的方法的参数,我们明白如何使用了。
介绍这个例子的目的,一个是展示erlang丰富强大的库,另外就是欣赏地道的erlang编程风格之美,希望你喜欢。
阅读(2330) | 评论(0) | 转发(0) |