PHP 8.0.6 Released!

MongoGridFS::storeUpload

(PECL mongo >=0.9.0)

MongoGridFS::storeUploadСохраняет загруженный файл в базе данных

Описание

public MongoGridFS::storeUpload ( string $name , array $metadata = ? ) : mixed

Список параметров

name

Имя загруженного файла(ов) для сохранения. Должно соответствовать атрибуту name поля файл в форме HTML.

metadata

Другие поля метаданных для включения в файл документа.

Замечание:

Данные поля могут перезаписать поля, автоматически созданные драйвером, как указано в основной документации MongoDB » коллекции файлов. В качестве практического применения данного поведения можно указать собственный chunkSize или _id для файла.

Замечание:

Поле filename будет заполнено именем файла клиента (например, $_FILES['foo']['name']).

Возвращаемые значения

Возвращает _id сохранённого документа. Это будет сгенерированный MongoId, за исключением случая, когда _id был явно указан в параметре metadata.

Замечание:

Если несколько файлов загружены с использованием одного и того же имени поля, этот метод ничего не вернёт; однако сами файлы всё равно будут обработаны.

Ошибки

Выдаёт исключение MongoGridFSException, если при чтении загруженных файлов или вставке в коллекции chunks или files возникает ошибка.

Список изменений

Версия Описание
PECL mongo 1.2.5 Изменён второй параметр на массив метаданных. До 1.2.5 вторым параметром была необязательная строка, переопределяющая имя файла.

Примеры

Пример #1 Пример HTML-формы для MongoGridFS::storeUpload()

Suppose you have the following HTML form:

<form method="POST" enctype="multipart/form-data">
    <label for="username">Имя пользователя:</label>
    <input type="text" name="username" id="username" />

    <label for="pic">Пожалуйста, загрузите изображение профиля:</label>
    <input type="file" name="pic" id="pic" />

    <input type="submit" />
</form>

Если вы хотите сохранить загруженное изображение в MongoDB, вы можете сделать следующее в скрипте, обрабатывающем отправку формы:

<?php
$m 
= new MongoClient();
$gridfs $m->selectDB('test')->getGridFS();

$gridfs->storeUpload('pic', array('username' => $_POST['username']));
?>

Смотрите также

add a note add a note

User Contributed Notes 3 notes

up
0
valentin at hilbig dot de
3 years ago
For my PHP 7.0.27 this is incompatible to the "multiple" tag on inputs.

Like this:

<input type="file" name="files[]" multiple>

Please note that you need to use 'files[]', as else only one file is used from the uploaded files.

As documented, you need to give the Index into $_FILES as the first argument to this function.  Like in:

foreach ($_FILES as $k=>$v)
   $db->getGridFS()->storeUpload($k, $v);

However in the case of "multiple" selects, the corresponding entry in $_FILES[$k]["name"] is an array of filenames, not just a single filename.  This is true even for a single file, in that case it is an array with just a single string in it.

In that case the function just silently fails.  No error, no problem shown, it just becomes a NOP.

The workaround is:

- Without JavaScript, fallback to single file upload.
- With JavaScript add "multiple", and do the upload with Ajax file-by-file.
- As then only single files reach PHP, the problem is solved.
up
-1
juris dot zeltins at gmail dot com
2 years ago
For multiple uploads storeUploads should be implemented.

But as we have possibility to use direct storeFile then it makes no sense because custom form was used anyway.
up
-6
kkasid94 at gmail dot com
4 years ago
I am not able to upload an image using this code.
Getting this error

Fatal error: Uncaught Error: Call to undefined method MongoDB\Database::getGridFS() in C:\xampp\htdocs\phpmongodb\new.php:4 Stack trace: #0 {main} thrown in C:\xampp\htdocs\phpmongodb\new.php on line 4
To Top