%%%------------------------------------------------------------------- %%% File : s3.erl %%% Author : Andrew Birkett %%% Description : %%% %%% Created : 14 Nov 2007 by Andrew Birkett %%%------------------------------------------------------------------- -module(s3). -behaviour(application). %%-------------------------------------------------------------------- %% External exports %%-------------------------------------------------------------------- -export([ start/0, start/2, shutdown/0, stop/1 ]). %% API -export([ list_buckets/0, create_bucket/1, delete_bucket/1, list_objects/2, list_objects/1, write_object/4, read_object/2, delete_object/2 ]). start()-> crypto:start(), application:start(xmerl), inets:start(), application:start(s3). start(_Type, _StartArgs) -> ID = get(access, "AMAZON_ACCESS_KEY_ID"), Secret = get(secret, "AMAZON_SECRET_ACCESS_KEY"), SSL = param(ssl, true), Timeout = param(timeout, nil), if SSL == true -> ssl:start(); true -> ok end, if ID == error orelse Secret == error -> {error, "AWS credentials not set. Pass as application parameters or as env variables."}; true -> N = param(workers, 5), s3sup:start_link([ID, Secret, SSL, Timeout], N) end. shutdown() -> application:stop(s3). create_bucket (Name) -> Pid = s3sup:get_random_pid(), gen_server:call(Pid, {put, Name} ). delete_bucket (Name) -> Pid = s3sup:get_random_pid(), gen_server:call(Pid, {delete, Name} ). list_buckets () -> Pid = s3sup:get_random_pid(), gen_server:call(Pid, {listbuckets}). write_object (Bucket, Key, Data, ContentType) -> Pid = s3sup:get_random_pid(), gen_server:call(Pid, {put, Bucket, Key, Data, ContentType}). read_object (Bucket, Key) -> Pid = s3sup:get_random_pid(), gen_server:call(Pid, {get, Bucket, Key}). delete_object (Bucket, Key) -> Pid = s3sup:get_random_pid(), gen_server:call(Pid, {delete, Bucket, Key}). %% option example: [{delimiter, "/"},{maxresults,10},{prefix,"/foo"}] list_objects (Bucket, Options ) -> Pid = s3sup:get_random_pid(), gen_server:call(Pid, {list, Bucket, Options }). list_objects (Bucket) -> list_objects( Bucket, [] ). stop(_State) -> ok. get(Atom, Env)-> case application:get_env(Atom) of {ok, Value} -> Value; undefined -> case os:getenv(Env) of false -> error; Value -> Value end end. param(Name, Default)-> case application:get_env(?MODULE, Name) of {ok, Value} -> Value; _-> Default end.