Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: cgi download and delete file

by sundialsvc4 (Abbot)
on Aug 15, 2013 at 12:37 UTC ( #1049575=note: print w/ replies, xml ) Need Help??


in reply to cgi download and delete file

You know that Private SNAFU is always on duty:   the mere fact that you zipped-up a bunch of files and pushed them to an HTML stream doesn’t mean that they arrived, any more than it does at the Post Office.   I would therefore design this program to build the Zip files, then remove the files from whence they were made (if appropriate), then put that file into a “to be downloaded” directory under some appropriate name.   From these, when the user requests a download, the file is renamed in some slight way to indicate that it “has been or is-being downloaded.”   (Renaming ahead-of-time avoids any file contention issues.   Moving it to a different directory ahead-of-time does the same thing.)   But in every step you have thus given yourself a way out.   If the download did not for whatever reason succeed, the data is still there and the process could be repeated.


Comment on Re: cgi download and delete file
Replies are listed 'Best First'.
Re^2: cgi download and delete file
by teddyttas (Novice) on Aug 15, 2013 at 14:35 UTC
    Thank you very much! Anyway, I think there is something I am getting wrong... When I use the cgi::application's header_prop (in the download_file subroutine) what I'm actually doing is a redirection to the download window, is it right? Cause I tried to make a redirection after the execution of the subroutine, but in this case the download doesn't start. If I put a sleep command after the subroutine, the script executes before the sleep command and then launches the download. So...I don't really understand this behaviour. I tried :
    $self->download_zip(); sleep 5; my $filename = "temporaneo/" . $self->session->param("nom_projet") + . ".zip"; unlink $filename;
    and
    $self->generate_zip(); $self->download_zip(); return $self->redirect("http://delete.cgi");
    What I was trying to do was following your advice: put the zip file in another directory and, if succeed, redirect to another run mode that erases the file, otherwise stay on the page and relaunch the download.
      Okay, I think I got the solution to my last question... it was simple. In fact I solved it in the following way...
      $self->generate_zip(); my $output = $self->download_zip(); #here I can do what I want. unlink and so on.. my $filename = "temporaneo/" . $self->session->param("nom_projet") + . ".zip"; unlink $filename; #and only then I stream the output return $output;
      I can now redirect to another runmode passing the $output variable and solve the problem as you suggested. thank you very much!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1049575]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (17)
As of 2015-07-29 14:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (263 votes), past polls