Как получить содержимое файла, отправленного через POST в Laravel 4?
У меня есть форма, которая отправляет текстовый файл через метод POST в Laravel 4. Однако внутри контроллера я не могу понять, как получить его содержимое, чтобы поместить его в поле BLOB в БД.
Документация Laravel и все записи, которые я нашел в Интернете, всегда показывают, как сохранить содержимое в файл с помощью метода ->move()
.
Это мой код в контроллере:
$book = Books::find($id);
$file = Input::file('summary'); // get the file user sent via POST
$book->SummaryText = $file->getContent(); <---- this is the method I am searching for...
$book->save(); // save the summary text into the DB
(SummaryText - MEDIUMTEXT в моей таблице БД).
Итак, как получить содержимое файла в Laravel 4.1 без необходимости его сохранения в файл? Возможно ли это?
Ответы
Ответ 1
Если вы отправляете текстовый файл, то он уже должен быть на сервере. Согласно документации laravel, Input::file
возвращает объект, который расширяет класс php SplFileInfo
, поэтому это должно работать:
$book->SummaryText = file_get_contents($file->getRealPath());
Я не уверен, будет ли метод php file_get_contents
работать в рамках Laravel... если он не пробовал это:
$book->SummaryText = File::get($file->getRealPath());
Ответ 2
Решение Nicer вместо file_get_contents будет использовать методы класса SPL, поскольку FileUpload уже расширяет их.
$file = Input::file('summary')->openFile();
$book->SummaryText = $file->fread($file->getSize());
Чтобы узнать больше о SplFileInfo и SplFileObject, выполните следующие действия:
Поскольку они могут быть действительно полезны и использование SPL, которое является ООП, является более приятным решением, чем структурные функции PHP.
Ответ 3
Начиная с Laravel v5.6.30 вы можете получить содержимое загруженного файла, например:
use Illuminate\Http\Request;
Route::post('/upload', function (Request $request) {
$content = $request->file('photo')->get();
});
источник: этот коммит
Ответ 4
\File::get($directory.$filename);
Работала для моего проекта, где каталог и имя файла определяются методами загрузки.
Обратная косая черта используется при создании рабочих пространств (пакетов) в laravel4.