PHP Velho Oeste 2024

MongoGridFS::storeUpload

(PECL mongo >=0.9.0)

MongoGridFS::storeUploadStocke un fichier téléchargé dans la base de données

Description

public MongoGridFS::storeUpload ( string $name [, array $metadata ] ) : mixed

Liste de paramètres

name

Le nom du ou des fichiers téléchargés à stocker. Il doit correspondre à l'attribut name du formulaire HTML.

metadata

Autres champs de méta-données à inclure dans le document fichier.

Note:

Ces champs peuvent aussi écraser ceux qui auraient pu être créés automatiquement par le driver, tel que décrit dans la documentation MongoDB sur les » fichiers de collection. Une des particularités de ce comportement serait de spécifier un chunkSize ou un _id personnalisé pour le fichier.

Note:

Le champ filename contiendra le nom du fichier client (i.e.$_FILES['foo']['name']).

Valeurs de retour

Retourne l'_id du fichier document sauvegardé. Cela va retourner un MongoId généré tant qu'un _id ne soit explicitement spécifié dans le paramètre metadata.

Note:

Si plusieurs fichiers sont téléchargés en utilisant le même nom de champ, cette méthode ne retournera rien ; cependant, les fichiers eux-même seront tout de même traités.

Erreurs / Exceptions

Lance une exception MongoGridFSException si une erreur survient lors de la lecture du ou des fichiers téléchargés, ou lors de l'insertion dans la collection chunks ou files.

Historique

Version Description
1.2.5 Modification du second paramètre en un tableau de méta-données. Avant la version 1.2.5, le second paramètre étaient une chaîne optionnelle permettant d'écraser le nom du fichier.

Exemples

Exemple #1 Exemple avec MongoGridFS::storeUpload() et un formulaire HTML

Supposons que vous avez le formulaire HTML suivant :

<form method="POST" enctype="multipart/form-data">
    <label for="username">Username:</label>
    <input type="text" name="username" id="username" />

    <label for="pic">Please upload a profile picture:</label>
    <input type="file" name="pic" id="pic" />

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

Si vous voulez stocker l'image téléchargé dans MongoDB, vous pouvez le faire grâce au script suivant, gérant la soumission du formulaire :

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

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

Voir aussi

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