Работа с GridFS

Последнее обновление: 30.10.2015

В первой главе вкратце упоминалась система GridFS, которая позволяет хранить большие объекмы информации и файлы. Драйвер PHP для MongoDB предоставляет набор классов, необходимых для работы с GridFS:

  • MongoGridFS: позволяет сохранять и извлекать информацию из бд

  • MongoGridFSFile: позволяет работать с отдельными файлами

  • MongoGridFSCursor: работает с курсорами

Сохранение информации

Для сохранения файла в системе GridFS используется функция storeUpload, которая принимает два параметра: название файла и метаданные и возвращает идентификатор _id сохраненного файла. Например, у нас есть некоторая форма для загрузки файла:

<html>
<head>
</head>
<body>
<form action="./" method="POST" enctype="multipart/form-data">
<input type="file" name="txtlog" />
<button>Send</button>
</form>
</body>
</html>

И скрипт ./, который обрабатывает форму:

$con = new MongoClient();
$db= $con-> test;

// Получаем объект класса GridFS
$gridFS = $db -> getGridFS();
// Получаем поле input в разметке HTML, которое имеет атриубут name=image
$file = 'txtlog';
// Определяем метаданные файла
$metadata = array('uploadDate' => new MongoDate());
// загружаем файл и возвращаем id
$id = $gridFS -> storeUpload($file, $metadata);
echo $id;

Метод getGridFS позволяет получить объект класса MongoGridFS и вызвать для полученного файла метод storeUpload. Данный метод возвращает идентификатор, который мы можем использовать по своему усмотрению, например, связать с каким-нибудь объектом в коллекции.

Извлечение файлов

Для получения файлов из бд мы можем воспользоваться опять же методом findOne класса GridFS (или методом find). Метод findOne возвращает объект класса MongoGridFSFile, который инкапсулирует всю функциональность для работы с файлом. Посмотрим на примере:

$con = new MongoClient();
$db= $con-> test;

// Получаем объект класса GridFS
$gridFS = $db -> getGridFS();
// Получаем файл по id
$file = $gridFS -> findOne(array('_id' => new MongoId('52e10cd4bd8c428c0900002a')));
// посылаем пользователю бинарное представление файла
echo $file -> getBytes();

con -> close();

Для получения файла идет фильтрация по id - объект MongoId получаем id и делаем выборку. Можно было бы применить и другой фильтр, например, по названию: $file = $gridFS -> findOne('22.txt') или вообще не передавать никакой фильтр и взять первый файл из выборки.

Класс MongoGridFSFile обладает некоторыми методами, которые позволяют манипулировать файлом:

  • getBytes: возвращает содержимое сайта в виде набора байтов

  • getFilename: возвращает имя файла

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

  • getSize: возвращает размер файла

  • write: пишет файл на диск

В данном случае для отдачи файла пользователю мы используем метод getBytes, и пользователь сможет увидеть текстовый файл в браузере.

Удаление файла

Удаление файла из системы GridFS производится с помощью метода delete, в который передается id файла:

$con = new MongoClient();
$db= $con-> test;

$gridFS = $db -> getGridFS();
$gridFS -> delete(new MongoId('52e10cd4bd8c428c0900002a'));

con -> close();
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850