2015-02-20 5 views
2

Вместо того, чтобы загружать и перемещать файл непосредственно в место на сервере, я бы скорее сохранил его в сеансе и загрузил его в состояние в более позднем месте.Laravel: сохранить загруженный файл в сеанс

Вот мой метод, который в настоящее время сохраняет файл на моем сервере:

public function step3store() { 

    $file   = Input::file('file'); 
    $identifier  = date("Ymd") . " - " . Session::get('lastName') . "_" . Session::get('firstName'); 

    $destinationPath = base_path() . '/uploads/'. $identifier ; 
    $extension  = $file->getClientOriginalExtension(); 
    $filename  = $identifier . " - " . uniqid() . "." . $extension; 

    $upload_success = Input::file('file')->move($destinationPath, $filename); 

    if($upload_success) { 
     return Response::json('success', 200); 
    } else { 
     return Response::json('error', 400); 
    } 

} 

И я имею в виду использовать что-то вроде этого, вместо:

Session::put([ 
     'file' => Input::get('file'), 
    ]); 

Но когда я просматриваю сессии, после того, как Я загрузил файл, я получил значение «null» для «файла».

Поскольку я загружаю несколько файлов на Ajax, я не уверен, что это как-то ломает способ ввода файлов в сеанс.

Итак, как мне сохранить несколько файлов на Ajax в сеанс Laravel?

Заранее спасибо.

+1

Почему вы этого хотите? Хранение файлов в сеансе не является хорошей практикой, почему бы вам не сохранить их в папке temp и выполнять работу cron каждый день, чтобы очистить его? Таким образом, вы можете сохранить временное местоположение на своей сессии, а не файл –

+0

Потому что я использую многошаговую форму. На шаге 3 пользователь загружает изображения. На шаге 4 он платит, и только тогда я хотел использовать реальный серверный ресурс и сохранять на нем фактические файлы, которые на самом деле соответствуют «порядку» – LoveAndHappiness

ответ

7

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

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

Ваше предложение «только тогда я хотел использовать реальный серверный ресурс» не имеет смысла, как если бы вы сохранили файл для сеанса, а затем еще воспользуйтесь ресурсом вашего сервера. Сессии записываются на диск. То же самое, если вы должны хранить файл в базе данных как BLOB (не делайте этого). Вы по-прежнему используете ресурсы своего сервера. Таким образом, теория сохранения файла на сеансе не прекращает использования ресурсов вашего сервера.

+0

Спасибо, Мартин – LoveAndHappiness

5

Так вы должны это сделать. Хранение всего изображения в сеансе - не очень хорошая идея. Файлы сеансов cookie не могут хранить большие данные.

Сохраните изображение на сервере. Дайте изображению идентификатор. И сохраните этот идентификатор в сеансе.

+1

. Я сделаю это. Ваш ответ был так же прав, поэтому спасибо за это. – LoveAndHappiness

Смежные вопросы