Я хочу переименовать файл, когда пользователь загрузит его.
Прямо сейчас я отправляю заголовки контента и контента, а затем отправляю файл пользователю с помощью функции PHP fpassthru.
Но есть 3 проблемы с этим методом:
Есть ли лучший способ переименования файлов при загрузке?
Поскольку вопрос был задан, некоторое время прошло, и html5
дал нам другой подход к этому:
<a href="someWeiredFileName.rar" download="coolFilename.rar">Download</a>
Загрузка attribute
( подробнее ) определяет filename
по умолчанию для хранения файла на компьютере клиента (он все равно сможет его изменить!).
Примечание. Это ничего не повлияет на ваш сервер.
<?php 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'); ?>
Псевдокод
while(1) { Echo "..."; //<-- send this to the client if (connection_status()!=0){ die; } }
Вы можете остановить скрипт PHP, если пользователь отменяет браузер, используя connection_status()
HTTP не может повторно подключить закрытое соединение. FTP может!
Для третьего пункта вы можете попробовать использовать заголовки HTTP Range .
Если у пользователя есть клиент загрузки, способный к возобновлению, он должен отправить эти заголовки в ваш скрипт, который вы могли бы использовать, чтобы точно определить, какие части файла отправить.