in reply to File download from BLOB

Well, it is also maybe worth mentioning that you do not have to store the data in a database if you don’t want to.   As long as the server-side code has some means to map the URL information to a file-location, it can then serve-up the data from that source.   If that location is not made available to Apache as a place from which static files can be served by its own logic, your app becomes the only way to get to the information.   The end-user neither knows nor cares where the server-app is getting its data from.

Replies are listed 'Best First'.
Re^2: File download from BLOB
by wolfie7873 (Novice) on Mar 25, 2011 at 20:00 UTC
    Combining ideas from both of you, I now have this (putting the file in a directory above the docroot so Apache can't serve it.):
    $r->content_type('application/pdf'); $r->err_headers_out->add('Content-disposition' => ("attachment; filena +me=$filename")); my $fh; open($fh,"</var/www/eddie/owner_release.pdf"); binmode $fh; while(<$fh>) { $m->print($_); } close $fh; return;
    And I get the same error message from Acrobat about the file being damaged. I do notice that the file is larger now than it should be. 14K -> 25K. Any other suggestions?
      the file is larger now than it should be. 14K -> 25K

      How does the downloaded file differ from the original one, i.e. what are those additional 11k?  Maybe that will give you a clue as to what's going wrong.

      Other than that, I don't feel entitled to comment further, as I've never used Mason myself.  But maybe this thread will help, which makes me think there might be "issues" delivering binary content via Mason, unless you know exactly what you're doing.

      P.S. in my above reply I was thinking of binmoding the output handle, but taking a closer look, the $m->print() is not an IO::Handle method call (as I originally figured), but a Mason method call, which simply adds content to the output buffer.  In other words, binmoding won't work here.  Also, as you don't seem to be on Windows (as I infer from the above /var/www/...), there won't be any linefeed translations being done, anyway.