Как получить содержимое файла, отправленного через POST в Laravel 4? - программирование
Подтвердить что ты не робот

Как получить содержимое файла, отправленного через 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 без необходимости его сохранения в файл? Возможно ли это?

4b9b3361

Ответ 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.