Принудительная загрузка с внешнего сервера и переименование - PullRequest
5 голосов
/ 12 февраля 2012

Мне нужна помощь с проблемой в инструменте, который я разрабатываю.

Мне нужно загрузить внешний файл и переименовать его, но без использования readfile (), file_get_contents () или fread () (файлыслишком велики, чтобы прочитать их на сервере и снова загрузить на компьютер посетителя).

Сначала я попробовал:

Код:

header("Location: http://www.example.com/example_download.zip");

Работает для загрузки, но не для переименования example_download.zip.

Итак, я попытался с readfile ():

Код:

header("Content-Disposition: attachment; filename="example_download_2.zip"\n\n");
header("Content-Type: application/force-download");
    readfile("http://www.example.com/example_download.zip");
    exit;

С приведенным выше кодом он работает хорошо, сначала загрузив удаленный файл на сервер, переименовав его и после отправки впосетитель с новым именем, но использование ресурсов этого процесса очень велико, а также использование полосы пропускания.

Поэтому я ищу способ принудительной загрузки внешнего файла с переименованиемэто на лету и создание загрузки с новым именем, но загрузка непосредственно из источника.Я могу?

Заранее спасибо С уважением

Ответы [ 2 ]

4 голосов
/ 03 июля 2012

HTML5 теперь позволяет вам делать то, что вы хотите через атрибут download:

<a href="http://www.example.com/example_download.zip" download="custom_filename.zip">
    Link
</a>

Подробнее:

http://developers.whatwg.org/links.html#attr-hyperlink-download http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download

2 голосов
/ 12 февраля 2012

Это невозможно для вас. Если ваш php-скрипт перенаправил клиента на другой URL-адрес, то все HTTP-заголовки оставляются на усмотрение нового URL-сценария. Вы должны скачать его, чтобы переименовать.

...