Как передать имя и тип ресурса при передаче файла HTTP? - PullRequest
1 голос
/ 05 марта 2011

Я создаю прокси в 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 считывал и затем возвращал файл пользователю.

Ответы [ 2 ]

2 голосов
/ 05 марта 2011

Вы можете установить заголовок Content-disposition

Content-disposition: attachment; filename=fname.ext
0 голосов
/ 06 марта 2011

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...