Переименуйте PDF-файл для загрузки на лету

StackOverflow https://stackoverflow.com/questions/1826804

  •  11-09-2019
  •  | 
  •  

Вопрос

Данный:Все загруженные на сервер PDF-файлы имеют префикс временных меток.Позже пользователь сможет снова загрузить эти файлы.Эти (уродливые) имена файлов никогда больше не изменятся на сервере.

Вопрос:Когда я даю возможность загрузить PDF-файл, имя файла выглядит некрасивым и длинным.Как я могу изменить это имя на что-то разумное, чтобы, когда пользователь загружает этот файл, имя не выглядело странно?

Нужно ли делать копию, так как переименовать исходный файл нет возможности?Не будет ли это дополнительных затрат на каждый загружаемый файл?Очевидно, что удаление скопированного файла будет еще одним дополнительным шагом?

Можно ли переименовать файл после полной загрузки файла на стороне клиента?

Что вы, ребята, предлагаете?

Это было полезно?

Решение

Что-то вроде этого:

<?php
// We'll be outputting a PDF  
header('Content-type: application/pdf');

// It will be called downloaded.pdf  
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf  
readfile('original.pdf');
?> 

Другие советы

Мне нужно было сделать это для недавнего проекта, и я немного не понимал, как это реализовать, но понял это вскоре после того, как увидел ответ Клауса.Чтобы подробнее остановиться на ответе Клауса:

1) Создайте файл с именем, скажем, «process.php».Измените код Клауса так, чтобы он принимал два параметра:исходное имя файла и новое имя.Мой процесс.php выглядит так:

<?php
$file = $_GET['file'];
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename='.$_GET['newFile']);
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

2) Создайте на своей странице пользователя ссылку, указывающую на сценарий процессора:

<a href="process.php?file=OriginalFile.pdf&newFile=MyRenamedFile.pdf">DOWNLOAD ME</a>

Вам необходимо установить желаемое имя файла в Content-Disposition заголовок:

$name = 'desiredname.pdf';
header('Content-Disposition: attachment;filename="' . $name . '"');

Но, к сожалению, это не будет воспринято определенным веб-браузером, разработанным командой из Редмонда.Если вы хотите, чтобы он работал и в этом браузере, вам нужно добавить то же имя файла, что и в последней части пути запроса.Например: http://example.com/pdf/desiredname.pdf.

Имя файла обслуживаемого контента определяется в заголовках HTTP.Посмотрите вокруг Страница PHP в заголовках (также комментарии) для получения дополнительной информации.

Некоторое время назад я делал нечто подобное, обслуживая файлы через php (в моем случае не для того, чтобы переименовывать их, а для того, чтобы проверить, что человек, загружающий их, вошел в систему и ему разрешено видеть эти файлы).Я обнаружил, что загрузка PDF-файлов не работала в IE, если я не добавил эти заголовки:

header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');

Я не уверен, почему.Поэкспериментируйте и посмотрите, что произойдет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top