J'utilise Zend Framework 1.9.6. Je pense que je l'ai bien compris, sauf pour la fin. C'est ce que j'ai jusqu'à présent:
# /public/index.php # Define path to uploads directory defined('APPLICATION_UPLOADS_DIR') || define('APPLICATION_UPLOADS_DIR', realpath(dirname(__FILE__) . '/../data/uploads')); # /application/forms/UploadFile.php # Set the file destination on the element in the form $file = new Zend_Form_Element_File('file'); $file->setDestination(APPLICATION_UPLOADS_DIR); # /application/controllers/MyController.php # After the form has been validated... # Rename the file to something unique so it cannot be overwritten with a file of the same name $originalFilename = pathinfo($form->file->getFileName()); $newFilename = 'file-' . uniqid() . '.' . $originalFilename['extension']; $form->file->addFilter('Rename', $newFilename); try { $form->file->receive(); //upload complete! # Save a display filename (the original) and the actual filename, so it can be retrieved later $file = new Default_Model_File(); $file->setDisplayFilename($originalFilename['basename']) ->setActualFilename($newFilename) ->setMimeType($form->file->getMimeType()) ->setDescription($form->description->getValue()); $file->save(); } catch (Exception $e) { //error }
3 Réponses :
Par défaut, les fichiers sont téléchargés dans le répertoire temporaire système, ce qui signifie que vous allez soit:
move_uploaded_file code>
pour déplacer les fichiers ailleurs, li>
Pour le deuxième point, il existe un exemple dans Le manuel : p> (mais lisez cette page: il y a d'autres informations utiles) em> p> p>
+1 pour la configuration de la destination dans l'élément de formulaire et en pointant le manuel.
Le lien semble mort maintenant.
Si vous deviez déplacer le fichier dans un répertoire public, tout le monde serait en mesure d'envoyer un lien à ce fichier à quelqu'un d'autre et que vous n'avez aucun contrôle sur qui a accès au fichier.
à la place, vous pourriez stocker Le fichier dans la DB en tant que longblob, puis utilisez le cadre Zend pour fournir aux utilisateurs accéder au fichier via un contrôleur / une action. Cela vous permettrait d'envelopper votre propre logique d'authentification et de permission de l'utilisateur autour de l'accès aux fichiers. P>
Vous aurez besoin d'obtenir le fichier à partir du répertoire / TMP afin de l'enregistrer à la DB: p >
<?php header("Content-Disposition: attachment; filename=".$this->fileName.".".$this->fileNameSuffix); header('Content-type: ".$this->fileMimeType."'); echo $this->file; ?>
Merci d'avoir parlé de quoi faire une fois que l'utilisateur doit télécharger le fichier. Je vais mettre en œuvre une action de téléchargement comme vous l'avez mentionné.
$this->setAction('/example/upload')->setEnctype('multipart/form-data'); $photo = new Zend_Form_Element_File('photo'); $photo->setLabel('Photo:')->setDestination(APPLICATION_PATH ."/../public/tmp/upload"); $this->addElement($photo);