Моя система создает временные файлы и отправляет их для загрузки. Эта часть работает очень хорошо. Проблема в том, что я хочу удалить эти файлы из файловой системы после того, как пользователь загрузит файл или сразу после этого в какой-то момент времени, но, похоже, функция afterFilter(), которая является последним методом контроллера, выполняется еще до того, как файл скачан, так что это не проблема, или я чего-то не хватает.Удалить файл после загрузки с помощью ответа Cakephp
У меня есть эти функции в DowloaderController
public function download() {
$fileName = $this->Session->read('nameFile');
if (!is_file(STORAGEPATH . $fileName)) {
return;
}
$this->response->file(STORAGEPATH . $fileName);
$this->response->download($fileName);
return $this->response;
}
и
public function afterFilter() {
if ($this->Session->check('nameFile')) {
if (is_file(STORAGEPATH . $this->Session->read('nameFile'))) {
@unlink(STORAGEPATH . $this->Session->read('nameFile'));
}
$this->Session->delete('nameFile');
}
}
В предыдущей версии торте, я имел обыкновение использовать что-то вроде:
$this->viewClass = 'Media';
$params = array(
'id' => $fileName,
'name' => $fileAlias,
'download' => true,
'extension' => $extension,
'path' => $path
);
$this->set($params);
и работал хорошо , но теперь это не
Есть ли способ отсоединить временный файл сразу после его загрузки?
или
то, что вы сделали, чтобы решить эту проблему?
Использование CakePHP 2,8
От PHP не существует способа узнать, когда файл завершил загрузку. После того как вы прочтете файл обратно клиенту, php будет завершен, будет ли клиент сохранен файл или нет. Клиентская сторона не сообщает серверу о том, чтобы сказать «Я сделан». –
Спасибо, что сказал мне, что я этого не знал. ok ok, но должен быть другим способом контролировать эти файлы, я думаю, я имею в виду не использовать событие или обратный вызов из торта, если они не могут контролировать действие. я попытаюсь использовать заголовок Location и перенаправить на другой метод с ответом, но я действительно не хочу делать перенаправление, вызывая его действие загрузки. Знаешь ли это, как ты думаешь, может быть другим путем или альтернативой для решения этой специфической ситуации? – Antonycx
Вам нужно запустить задание cron для удаления временных файлов (удалять только старые файлы). – Manmohan