MogileFS-REST
view release on metacpan or search on metacpan
lib/MogileFS/REST.pm view on Meta::CPAN
}
sub delete {
my ($app, $req) = @_;
my ($domain, $key) = split_path($req->path);
$app->info("deleting $domain:$key");
my $client = $app->get_client($domain);
my $rv = $client->delete($key);
my $e = $client->errstr;
return $app->respond_error($req, "Couldn't delete $domain/$key: $e")
unless $rv;
my $res = $req->new_response(HTTP_NO_CONTENT);
return $res;
}
sub put {
my ($app, $req) = @_;
my ($domain, $key) = split_path($req->path);
$app->info("creating $domain:$key");
my $mogclass = $req->header('X-MogileFS-Class') || $app->{default_class};
my $size = $req->content_length;
my $opts = { bytes => $size, largefile => $app->{largefile} };
my $data_handle = $req->input;
my $client = $app->get_client($domain);
my $rv = $client->store_file($key, $mogclass, $data_handle, $opts);
if (defined $rv) {
my $res = $req->new_response(HTTP_CREATED);
$res->header( Location => $req->uri );
return $res;
}
else {
my $errstr = $client->errstr;
my $err = "Can't save key '$domain/$key': $errstr";
$app->error($err);
return $app->respond_error($req, $err);
}
}
sub respond_not_found {
my ($app, $req) = @_;
my $res = $req->new_response(HTTP_NOT_FOUND);
$res->content_type('text/plain');
$res->body('No such file');
return $res;
}
sub respond_error {
my ($app, $req, $error) = @_;
my $res = $req->new_response(HTTP_INTERNAL_SERVER_ERROR);
$res->content_type('text/plain');
$res->body($error || "Server Error");
return $res;
}
sub split_path {
my $path = shift;
$path =~ s{^/+}{};
my ($domain, $key) = split m{/}, $path, 2;
return ($domain, $key);
}
1;
( run in 1.096 second using v1.01-cache-2.11-cpan-71847e10f99 )