Added cleanup flag to auto-delete temp files
[catagits/HTTP-Body.git] / lib / HTTP / Body.pm
index 5dd4f32..db18144 100644 (file)
@@ -68,7 +68,8 @@ It is currently used by L<Catalyst> to parse POST bodies.
 
 When parsing multipart bodies, temporary files are created to store any
 uploaded files.  You must delete these temporary files yourself after
-processing them.
+processing them, or set $body->cleanup(1) to automatically delete them
+at DESTROY-time.
 
 =head1 METHODS
 
@@ -98,6 +99,7 @@ sub new {
     my $body = $TYPES->{ $type || 'application/octet-stream' };
 
     my $self = {
+        cleanup        => 0,
         buffer         => '',
         chunk_buffer   => '',
         body           => undef,
@@ -116,6 +118,20 @@ sub new {
     return $self->init;
 }
 
+sub DESTROY {
+    my $self = shift;
+    
+    if ( $self->{cleanup} ) {
+        my @temps = ();
+        for my $upload ( values %{ $self->{upload} } ) {
+            push @temps, map { $_->{tempname} || () }
+                ( ref $upload eq 'ARRAY' ? @{$upload} : $upload );
+        }
+        
+        unlink map { $_ } grep { -e $_ } @temps;
+    }
+}
+
 =item add
 
 Add string to internal buffer. Will call spin unless done. returns
@@ -220,6 +236,18 @@ sub chunked {
     return shift->{chunked};
 }
 
+=item cleanup
+
+Set to 1 to enable automatic deletion of temporary files at DESTROY-time.
+
+=cut
+
+sub cleanup {
+    my $self = shift;
+    $self->{cleanup} = shift if @_;
+    return $self->{cleanup};
+}
+
 =item content_length
 
 Returns the content-length for the body data if known.