PHP Velho Oeste 2024

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 возникает ошибка.

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

Версия Описание
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
6 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
5 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
-4
kkasid94 at gmail dot com
7 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