我正在Perl中构建一个代理,用于检查是否允许用户访问特定文件,如果允许,则将该文件返回给用户。用户通过调用以下格式的URL来访问该文件:
http://www.example.com/products?id=1234
如果用户有权访问该文件,则应将其返回给具有正确名称和文件类型的用户。以下是我目前正在使用的代码,它似乎无法正常工作:
my $file = "/path/to/file.tar.gz";
open FILE,qq|<$file| || die!;
print $cgi->header('application/x-gzip');
print <FILE>;
close FILE;
我确信有一些简单的东西我可以忽略但是如何指定返回文件的名称并确保用户的浏览器处理是正确的文件类型?为了清楚起见,我不希望用户能够直接访问服务器上的文件,而是希望Perl脚本读入然后将文件提供给用户。
答案 0 :(得分:2)
您可以设置Content-disposition标头
Content-disposition: attachment; filename=fname.ext
答案 1 :(得分:0)
die!
是语法错误。用以下代码替换您的示例代码:
use File::Slurp qw(read_file);
⋮
print $cgi->header(…);
my $file_content = read_file '/path/to/file.tar.gz'
print $file_content;
使用X-Sendfile可以更有效地解决问题。