«

»

Fév 12

Yii1 – Uploader un fichier dans un blob d’une base de données

Dans un article précédent, nous avons vu comment uploader un fichier sur le serveur .

Nous allons voir maintenant comment charger un fichier dans une base de données.

Au niveau de la vue (view.php)

Nous allons utiliser le composant « activeFileField » pour que l’utilisateur sélectionne le fichier.
Note : Pour que cela fonctionne, il faut mettre à jour ‘htmlOptions’ avec « array(‘enctype’ => ‘multipart/form-data’) ».

<h1>
<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'users-users-form',
	'enableAjaxValidation'=>false,
    'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); ?>
 
<div class="row">
        <?php echo $form->labelEx($model,'fichier'); ?>
        <?php echo CHtml::activeFileField($model, 'fichier'); ?>  
        <?php echo $form->error($model,'fichier'); ?>
</div>
<p>
 
</p>
<div class="row buttons">
		<?php echo CHtml::submitButton('Valider'); ?>
	</div>
<?php $this->endWidget(); ?>

Modèle (Image.php)

Définition de la table

Nous allons créer la table qui stockera le fichier pour une base de données mySQL.

CREATE TABLE IF NOT EXISTS `fichier` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `file_name` VARCHAR(64) NOT NULL,
  `file_type` VARCHAR(64) NOT NULL,
  `file_size` INT(11) NOT NULL,
  `file_content` longblob NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

file_content contiendra le fichier physique.

Pour rappel sous MySQL, une donnée de type
BLOB 65 536 octêts
MEDIUMBLOB 16 777 octêts
LONGBLOB 4 294 967 296 octêts

le modèle associé

Pour gérer le fichier, nous allons créer un modèle afin de récupérer les données saisies par l’utilisateur
la variable $image contiendra donc le fichier a télécharger.

class Fichier extends CActiveRecord
{
    /**
     * Cette propriété sera utilisée pour stocker les informations du fichier
     */
     public $fichier;
 
 
     public function rules()
    {
        /* Exemple pour des fichiers de type image */
        return array(
            array('image', 'file', 'types'=>'jpg, gif, png'),
        );
    }

Contrôleur (FichierController.php)

  public function actionCreate()
    {
        $model=new Fichier;
 
        if(isset($_POST['Fichier']))
        {
 
          $model->attributes=$_POST['Fichier'];
          // récupération des informations du fichier  
          $uploadedFile = CUploadedFile::getInstance($model, 'fichier');
          $fileName = "{$uploadedFile}"; 
 
          $model->file_name = $fileName;
 
        if($file=CUploadedFile::getInstance($this,'fichier'))
        {
            $this->file_name=$file->name;
            $this->file_type=$file->type;
            $this->file_size=$file->size;
            $this->file_content=file_get_contents($file->tempName);
        } 
       if($model->save()){
            $this->redirect(array('create'));
       }
 
      } else
        $this->render('view',array('model'=>$model,));
    }

1 ping

  1. Download un fichier depuis un blob dans une base de données MySQL

    […] « uploader un fichier dans un blob d’une base de données […]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser les balises HTML suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>