Переименование файлов при загрузке - PullRequest
7 голосов
/ 26 ноября 2009

Я хочу переименовать файл, когда пользователь загружает его.

Сейчас я отправляю заголовки размещения содержимого и длины содержимого, а затем отправляю файл пользователю с помощью функции PHP fpassthru.

Но есть 3 проблемы с этим методом:

  1. Если я отправляю большие (более 3-4 ГБ) файлы таким способом, тогда мой PHP-скрипт выполняется слишком много времени и может быть прерван по таймауту.
  2. Если пользователь отменит загрузку, PHP-скрипт продолжит чтение и отправит файл
  3. Если пользователь приостановит загрузку, он не сможет возобновить его позже.

Есть ли лучший способ переименовать файлы при загрузке?

Ответы [ 3 ]

15 голосов
/ 08 июня 2013

После того, как вопрос был задан, прошло некоторое время, и html5 дал нам другой подход к этому:

<a href="someWeiredFileName.rar" download="coolFilename.rar">Download</a>

Загрузка attribute ( Узнать больше ) определяет значение по умолчанию filename для хранения файла на клиентском компьютере (он все еще сможет его изменить!) .

Примечание: это не повлияет на ваш сервер.

12 голосов
/ 26 ноября 2009
<?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');
?> 
  1. Файл будет предложен для загрузки в виде файла "download.pdf", а его первоначальное имя было "original.pdf".

Псевдокод

while(1) {
    Echo "..."; //<-- send this to the client
    if (connection_status()!=0){
    die;
    }
}
  1. Вы можете остановить скрипт PHP, если пользователь отменит браузер, используя connection_status()

  2. HTTP не может переподключить закрытое соединение. FTP может!

1 голос
/ 26 ноября 2009

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

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