Jump to content

[RESOLU]Permettre aux clients d’uploader des fichiers ZIP via la personnalisation de produit


Recommended Posts

Salut à tous !

Je souhaiterais permettre aux clients de ma boutique de pouvoir uploader leurs propres fichiers ZIP depuis la personnalisation du produit dans le front office.
Sur le forum français et le forum anglophone, on ne peut trouver que des morceaux de solution.....
Quelqu'un d'expérimenté peut-il synthétiser ? ou simplement indiquer comment faire une bonne fois
pour toutes et qu'on puisse mettre RESOLU au début de ce post ?!

Un grand merci d'avance à celui qui fera l'effort.
Bien à vous.

Share this post


Link to post
Share on other sites

Salut à tous (ou à moi-même si je suis le seul),

Après maintes heures (n'étant spécialiste), voici la soluce :

1/ Modifier product.php comme suit :

function isZIP($file)
{
   /* Detect mime content type */
   $mime_type = false;
   $types = array('multipart/x-zip','application/zip','application/x-zip-compressed','application/x-zip');

   if (function_exists('finfo_open'))
   {
       $finfo = finfo_open(FILEINFO_MIME);
       $mime_type = finfo_file($finfo, $file['tmp_name']);
       finfo_close($finfo);
   }
   elseif (function_exists('mime_content_type'))
       $mime_type = mime_content_type($file['tmp_name']);
   elseif (function_exists('exec'))
       $mime_type = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name'])));
       if (empty($mime_type) || $mime_type == 'regular file')
               $mime_type = $file['type'];
       if (($pos = strpos($mime_type, ';')) !== false)
               $mime_type = substr($mime_type, 0, $pos);
   // is it a picture ?

   return $mime_type && in_array($mime_type, $types);
}

function pictureUpload(Product $product, Cart $cart)
{
   global $errors;

   if (!$fieldIds = $product->getCustomizationFieldIds())
       return false;
   $authorizedFileFields = array();
   foreach ($fieldIds AS $fieldId)
       if ($fieldId['type'] == _CUSTOMIZE_FILE_)
           $authorizedFileFields[intval($fieldId['id_customization_field'])] = 'file'.intval($fieldId['id_customization_field']);
   $indexes = array_flip($authorizedFileFields); 
   foreach ($_FILES AS $fieldName => $file)
       if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name']))
       {
           $fileName = md5(uniqid(rand(), true));
           if (($error = checkImage($file, intval(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))) && (!isZIP($file))) {
               $errors[] = $error;
               return false;
           }
           if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)) {
               return false;
           }

           if (isZIP($file)) {
                   $fileName = "P" . $fileName;
                   if (!copy($tmpName, _PS_PROD_PIC_DIR_.$fileName)) {
                                $errors[] = Tools::displayError('An error occurred during the file upload.');
                       return false;
                   }
                   $oldfile = './img/zip.jpg';
           } else {
                   $fileName = "J" . $fileName;
                   if (!imageResize($tmpName, _PS_PROD_PIC_DIR_.$fileName)) {
                                $errors[] = Tools::displayError('An error occurred during the image upload.');
                       return false;
                   }
                   $oldfile = $tmpName;
           }
           if (!imageResize($oldfile,  _PS_PROD_PIC_DIR_.$fileName.'_small', intval(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), intval(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT')))) {
                        $errors[] = Tools::displayError('An error occurred during the image upload.');
               return false;
           }                    

                       if (!chmod(_PS_PROD_PIC_DIR_.$fileName, 0777) OR !chmod(_PS_PROD_PIC_DIR_.$fileName.'_small', 0777)) {
                               $errors[] = Tools::displayError('An error occurred during the image upload.');
               return false;
           }

           $cart->addPictureToProduct(intval($product->id), $indexes[$fieldName], $fileName);

           unlink($tmpName);
       }
   return true;
}



2/ Modifier displayImage.php comme suit :

<?php

$name = $_GET['name'];
$file = $_GET['img'];

require_once(dirname(__FILE__).'/../config/config.inc.php');
require_once(dirname(__FILE__).'/init.php');

$type = substr($file, 0, 1);
$img = substr($file, 1);

if ($img AND Validate::isMd5($img) AND $name AND Validate::isGenericName($name) AND file_exists(_PS_PROD_PIC_DIR_.$file))
{

   if ($type == "P") {
       header('Content-type: application/zip'); /*'multipart/x-zip','application/zip','application/x-zip-compressed','application/x-zip'*/
       $ext = ".zip";    
   } elseif ($type == "J") {
       header('Content-type: image/jpeg');
       $ext = ".jpg";
   }

   header('Content-Disposition: attachment; filename="'.$name.$ext.'"');
   echo file_get_contents(_PS_PROD_PIC_DIR_.$file);
}

?>



3/ Ajouter l'icone ZIP (zip.jpg) dans le répertoire yourwebsite/img

A bientôt !

21111_6gq13ZR6QR4VQQmpsKM3_t

Share this post


Link to post
Share on other sites

  • 2 weeks later...
  • 4 weeks later...

Bonjour, j'ai essayé d'ajouter le format pdf mais ça ne marche pas. Soyez indulgent je suis méga débutant. Pourriez vous m'aider ?

Voici le code que j'ai inséré dans product.php

function isPDF($file)
{
   /* Detect mime content type */
   $mime_type = false;
   $types = array('application/pdf');

   if (function_exists('finfo_open'))
   {
       $finfo = finfo_open(FILEINFO_MIME);
       $mime_type = finfo_file($finfo, $file['tmp_name']);
       finfo_close($finfo);
   }
   elseif (function_exists('mime_content_type'))
       $mime_type = mime_content_type($file['tmp_name']);
   elseif (function_exists('exec'))
       $mime_type = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name'])));
       if (empty($mime_type) || $mime_type == 'regular file')
               $mime_type = $file['type'];
       if (($pos = strpos($mime_type, ';')) !== false)
               $mime_type = substr($mime_type, 0, $pos);
   // is it a picture ?

   return $mime_type && in_array($mime_type, $types);
}

function isZIP($file)
{
   /* Detect mime content type */
   $mime_type = false;
   $types = array('multipart/x-zip','application/zip','application/x-zip-compressed','application/x-zip');

   if (function_exists('finfo_open'))
   {
       $finfo = finfo_open(FILEINFO_MIME);
       $mime_type = finfo_file($finfo, $file['tmp_name']);
       finfo_close($finfo);
   }
   elseif (function_exists('mime_content_type'))
       $mime_type = mime_content_type($file['tmp_name']);
   elseif (function_exists('exec'))
       $mime_type = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name'])));
       if (empty($mime_type) || $mime_type == 'regular file')
               $mime_type = $file['type'];
       if (($pos = strpos($mime_type, ';')) !== false)
               $mime_type = substr($mime_type, 0, $pos);
   // is it a picture ?

   return $mime_type && in_array($mime_type, $types);
}

function pictureUpload(Product $product, Cart $cart)
{
   global $errors;

   if (!$fieldIds = $product->getCustomizationFieldIds())
       return false;
   $authorizedFileFields = array();
   foreach ($fieldIds AS $fieldId)
       if ($fieldId['type'] == _CUSTOMIZE_FILE_)
           $authorizedFileFields[intval($fieldId['id_customization_field'])] = 'file'.intval($fieldId['id_customization_field']);
   $indexes = array_flip($authorizedFileFields); 
   foreach ($_FILES AS $fieldName => $file)
       if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name']))
       {
           $fileName = md5(uniqid(rand(), true));
           if (($error = checkImage($file, intval(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))) && (!isZIP($file))) {
               $errors[] = $error;
               return false;
           }
           if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)) {
               return false;
           }

           if (isZIP($file)) {
                   $fileName = "P" . $fileName;
                   if (!copy($tmpName, _PS_PROD_PIC_DIR_.$fileName)) {
                                $errors[] = Tools::displayError('An error occurred during the file upload.');
                       return false;
                   }
                   $oldfile = './img/zip.jpg';
           } if (isPDF($file)) {
                   $fileName = "P" . $fileName;
                   if (!copy($tmpName, _PS_PROD_PIC_DIR_.$fileName)) {
                                $errors[] = Tools::displayError('An error occurred during the image upload.');
                       return false;
                   }
                   $oldfile = './img/pdf.jpg';
           } else {
                   $fileName = "J" . $fileName;
                   if (!imageResize($tmpName, _PS_PROD_PIC_DIR_.$fileName)) {
                                $errors[] = Tools::displayError('An error occurred during the image upload.');
                       return false;
                   }
                   $oldfile = $tmpName;
           }
           if (!imageResize($oldfile,  _PS_PROD_PIC_DIR_.$fileName.'_small', intval(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), intval(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT')))) {
                        $errors[] = Tools::displayError('An error occurred during the image upload.');
               return false;
           }                    

                       if (!chmod(_PS_PROD_PIC_DIR_.$fileName, 0777) OR !chmod(_PS_PROD_PIC_DIR_.$fileName.'_small', 0777)) {
                               $errors[] = Tools::displayError('An error occurred during the image upload.');
               return false;
           }

           $cart->addPictureToProduct(intval($product->id), $indexes[$fieldName], $fileName);

           unlink($tmpName);
       }
   return true;
}

Share this post


Link to post
Share on other sites

Et voici le code que j'ai inséré dans displayImage.php :

<?php

$name = $_GET['name'];
$file = $_GET['img'];

require_once(dirname(__FILE__).'/../config/config.inc.php');
require_once(dirname(__FILE__).'/init.php');

$type = substr($file, 0, 1);
$img = substr($file, 1);

if ($img AND Validate::isMd5($img) AND $name AND Validate::isGenericName($name) AND file_exists(_PS_PROD_PIC_DIR_.$file))
{

   if ($type == "P") {
       header('Content-type: application/zip'); /*'multipart/x-zip','application/zip','application/x-zip-compressed','application/x-zip'*/
       $ext = ".zip";
   } if ($type == "P") {
       header('Content-type: application/pdf');
       $ext = ".pdf";    
   } elseif ($type == "J") {
       header('Content-type: image/jpeg');
       $ext = ".jpg";
   }

   header('Content-Disposition: attachment; filename="'.$name.$ext.'"');
   echo file_get_contents(_PS_PROD_PIC_DIR_.$file);
}

?>  

Share this post


Link to post
Share on other sites

J'ai essayé les deux solutions (ZIP et PDF)
Quand j'envoi un fichier, j'ai une erreur : 1.Une erreur est survenue pendant le chargement de l'image
Je ne suis pas chez free.

Une idée ?

Share this post


Link to post
Share on other sites

J'ai installé Prestashop sur MAC avec MANP 1.9 qui gère le PHP 5.3.2

L'upload avec le code pour le ZIP uniquement marche.
L'upload avec le code pour ZIP & PDF ne marche pas.

Share this post


Link to post
Share on other sites

Bonjour Tous le monde,

après quelques tests, je viens de trouver une solutions pour permettre le l'upload en ZIP - PDF - et image via la personnalisation des produits

voila mes fichiers sources :

fichier : product.php

function isZIP($file)
{
/* Detect mime content type */
$mime_type = false;
$types = array('multipart/x-zip','application/zip','application/x-zip-compressed','application/x-zip');
if (function_exists('finfo_open'))
{
$finfo = finfo_open(FILEINFO_MIME);
$mime_type = finfo_file($finfo, $file['tmp_name']);
finfo_close($finfo);
}
elseif (function_exists('mime_content_type'))
$mime_type = mime_content_type($file['tmp_name']);
elseif (function_exists('exec'))
$mime_type = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name'])));
if (empty($mime_type) || $mime_type == 'regular file')
$mime_type = $file['type'];
if (($pos = strpos($mime_type, ';')) !== false)
$mime_type = substr($mime_type, 0, $pos);
// is it a picture ?
return $mime_type && in_array($mime_type, $types);
}

function isPDF($file)
{
/* Detect mime content type */
$mime_type = false;
$types = array('application/pdf');
if (function_exists('finfo_open'))
{
$finfo = finfo_open(FILEINFO_MIME);
$mime_type = finfo_file($finfo, $file['tmp_name']);
finfo_close($finfo);
}
elseif (function_exists('mime_content_type'))
$mime_type = mime_content_type($file['tmp_name']);
elseif (function_exists('exec'))
$mime_type = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name'])));
if (empty($mime_type) || $mime_type == 'regular file')
$mime_type = $file['type'];
if (($pos = strpos($mime_type, ';')) !== false)
$mime_type = substr($mime_type, 0, $pos);
// is it a picture ?
return $mime_type && in_array($mime_type, $types);
}

function pictureUpload(Product $product, Cart $cart)
{
global $errors;
if (!$fieldIds = $product->getCustomizationFieldIds())
return false;
$authorizedFileFields = array();
foreach ($fieldIds AS $fieldId)
if ($fieldId['type'] == _CUSTOMIZE_FILE_)
$authorizedFileFields[intval($fieldId['id_customization_field'])] = 'file'.intval($fieldId['id_customization_field']);
$indexes = array_flip($authorizedFileFields); 
foreach ($_FILES AS $fieldName => $file)
if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name']))
{
$fileName = md5(uniqid(rand(), true));
if (($error = checkImage($file, intval(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))) && (!isZIP($file))   && (!isPDF($file)) ){
$errors[] = $error;
return false;
}
if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)) {
return false;
}

if (isPDF($file)) {
$fileName = "P" . $fileName;
if (!copy($tmpName, _PS_PROD_PIC_DIR_.$fileName)) {
$errors[] = Tools::displayError('An error occurred during the file upload.');
return false;
}
$oldfile = './img/pdf.jpg';
} 
elseif (isZIP($file)) {
$fileName = "Z" . $fileName;
if (!copy($tmpName, _PS_PROD_PIC_DIR_.$fileName)) {
$errors[] = Tools::displayError('An error occurred during the file upload.');
return false;
}
$oldfile = './img/zip.jpg';
} 
else {
$fileName = "J" . $fileName;
if (!imageResize($tmpName, _PS_PROD_PIC_DIR_.$fileName)) {
$errors[] = Tools::displayError('An error occurred during the image upload.');
return false;
}
$oldfile = $tmpName;
}
if (!imageResize($oldfile,  _PS_PROD_PIC_DIR_.$fileName.'_small', intval(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), intval(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT')))) {
$errors[] = Tools::displayError('An error occurred during the image upload.');
return false;
}                    

if (!chmod(_PS_PROD_PIC_DIR_.$fileName, 0777) OR !chmod(_PS_PROD_PIC_DIR_.$fileName.'_small', 0777)) {
$errors[] = Tools::displayError('An error occurred during the image upload.');
return false;
}
$cart->addPictureToProduct(intval($product->id), $indexes[$fieldName], $fileName);
unlink($tmpName);
       }
   return true;
} 


fichier : repertoireadmin/displayImage.php

 
<?php

$name = $_GET['name'];
$file = $_GET['img'];

require_once(dirname(__FILE__).'/../config/config.inc.php');
require_once(dirname(__FILE__).'/init.php');

$type = substr($file, 0, 1);
$img = substr($file, 1);

if ($img AND Validate::isMd5($img) AND $name AND Validate::isGenericName($name) AND file_exists(_PS_PROD_PIC_DIR_.$file))
{

   if  ($type == "P") {
       header('Content-type: application/pdf');
       $ext = ".pdf";  
   } elseif ($type == "Z") {
       header('Content-type: application/zip'); /*'multipart/x-zip','application/zip','application/x-zip-compressed','application/x-zip'*/
       $ext = ".zip";  
   } elseif ($type == "J") {
       header('Content-type: image/jpeg');
       $ext = ".jpg";
   }

   header('Content-Disposition: attachment; filename="'.$name.$ext.'"');
   echo file_get_contents(_PS_PROD_PIC_DIR_.$file);
}

?> 

23671_JAXIXzgyil4F6ndgKEuR_t

Share this post


Link to post
Share on other sites

  • 3 weeks later...

Ceci est très bien, mais comment créer une sorte de barre de progression pour savoir ou en est l'upload quand le fichier est lourd.
Il ne faut pas que l'utilisateur croit que l'application est plantée.

Share this post


Link to post
Share on other sites

Ceci est très bien, mais comment créer une sorte de barre de progression pour savoir ou en est l'upload quand le fichier est lourd.
Il ne faut pas que l'utilisateur croit que l'application est plantée.


Très bonne idée...
Merci d'avance du travail fourni...
A bientôt j'espère
Axel

Share this post


Link to post
Share on other sites

Bonjour Tous le monde,

après quelques tests, je viens de trouver une solutions pour permettre le l'upload en ZIP - PDF - et image via la personnalisation des produits

voila mes fichiers sources :

fichier : product.php

[/code]


Bonjour,
pouvez vous préciser à quel endroit dans le fichier il faut mettre ce code?
Merci d'avance
Axel

Share this post


Link to post
Share on other sites

  • 1 month later...

Messieurs dames,

Pour réponde à ta question Axelkab (en espérant que tu n'attendes pas cette réponse depuis mi-juin) , à la place de la fonction présente de la ligne 9 à 41.
Bref, j'utilisais cette solution pour l'envoi de pdf sur un site en 1.2.5, cette dernière ne fonctionne plus en 1.3, est-ce un problème de compatibilité ou moi-même qui suis autiste, quelqu'un pourrait-il me faire passer un product.php avec upload de pdf viable?
Merci

Cordialement

Rincedent

Share this post


Link to post
Share on other sites

  • 4 weeks later...

J'ai le même problème sur une 1.3.x ça ne fonctionne pas non plus, je n'ai pas testé sur une 1.2....
Je cherche toujours, si je trouve, je post la soluce.


EDIT :
J'ai une piste :
La ligne :

 if (($error = checkImage($file, intval(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))) && (!isPDF($file))) {



Renvoi bien un type mine PDF -> application/pdf

or quelques lignes plus loin,

if (isPDF($file)) {
       $fileName = "P" . $fileName;



renvoi -> ERROR: cannot open `/tmp/php5Ki470' (No such file or directory)


donc il considère que ce n'est pas un pdf et passe donc au traitement d'une image, et là forcement ça bug.

Share this post


Link to post
Share on other sites

  • 2 weeks later...
  • 1 month later...

Bonjour à tous

Je relance ce topics , dans le sens que je veux savoir , qu'elles sont fichiers à modifiers pour ajouter plusieurs extensions est ou je dois coller le code source , à qu'elle endroit ?

Bonne journée , merci de votre aide ...

Michel

Share this post


Link to post
Share on other sites

Bonjour à tous

Je relance ce topics , dans le sens que je veux savoir , qu'elles sont fichiers à modifiers pour ajouter plusieurs extensions est ou je dois coller le code source , à qu'elle endroit ?

Bonne journée , merci de votre aide ...

Michel


Tout est dans la page1 vers la fin, les modifs et dans quels fichiers...

Share this post


Link to post
Share on other sites

  • 4 weeks later...

Bonjour,
Je reprend ce fil car j'ai besoin que mes client puisse uploader des fichiers pdf, zip...
J'ai essayer les solutions précédente ... mais rien n'y fait !! ca marche pas.. soit j'ai des erreurs fatal.. soit j'ai le code qui s'affiche ??? bon faut dire j'y connait pas grand chose.. donc c'est peut etre normal ^^
Si quelqu'un se sent l'ame de m'expliquer comment faire.. je lui en serait fort reconnaissant :)
merci
mat

Share this post


Link to post
Share on other sites

  • 1 month later...

Bonjour à tous, je commence tout juste à découvrir le merveilleux monde de prestashop et je suis déjà un peu perdu.
J'ai installé la nouvelle version 1.3.3 et je me demande s'il est possible de faire un unpload de fichiers mais sous divers formats, .ai .eps ou autres car pour la personnalisation des produits j'ai besoin de fichiers vectoriels.

J'ai essayé d'appliquer les solutions indiquées un peu plus haut mais il parait que ca ne marche pas, un problème lié aux versions??

Est ce que quelqu'un a une idée de comment on fait? il faut modifier quelle fichier? et on modifie quoi??
Il y a un module qui permettrait de faire ca?

En tout cas meci pour votre aide, je vois que je ne suis pas le seul à vouloir faire un truc comme ca donc je me dit qu'il y aura bien un solution non??

Merci à tous

Share this post


Link to post
Share on other sites

  • 4 months later...
  • 5 months later...
  • 2 months later...

Bonjour,

Bonne année..........

 

voici la soluce pour pouvoir telecharger des pdf, des zip, des psd,des ai sur prestashop 1.4.6.2 dans la personnalisation.

 

tout d'abord ProductController.php (racine du site/controller/ProductController.php)

 

renommez votre ancien fichier et via ftp placez celui la: ProductController.php

 

 

ensuite renommez via ftp images.inc.php et mettez celui la a la place images.inc.php

 

 

et ensuite dans votre dossier admin/displayImage.php renommez displayImage.php et remplacez par displayImage.php

 

et enfin dans le dossier admin/tabs/AdminOrders.php renommez AdminOrders.php et remplacez parAdminOrders.php

 

et derniere etape les vignettes du format du fichier telecharge

 

placer dans le dossier img a la racine de votre site ces 4 jpg (voir fichier zip)

img.zip

 

et n'oubliez pas de modifier la phrase dans product.tpl qui indique le format possible en telechargement.........

 

 

voila en esperant n'avoir rien oublié

 

misterpink

  • Like 1

Share this post


Link to post
Share on other sites

Vraiment top Merci, par contre juste une chose comment fait on pour enlever le choix de la quantité dans le panier du fichier uploader , merci encore je cherchait cette fonction depuis des moi "bravo"

Share this post


Link to post
Share on other sites

Bravo Mister pink !! ça marche nikel, cependant j'ai une question : je voulais rajouter l'extension "eps", j'ai modifié les 4 fichiers (avec application/postscript pour les eps) j'ai pas d'erreur, mais j'ai pas non plus mon fichier, as-tu une idée? Merci d'avance

Share this post


Link to post
Share on other sites

Super ! Merci beaucoup Misterpink ! Je galèrais depuis 2 jours avec les pseudo-solutions qu'on trouve partout...

 

Mais sinon, comme timmxnizar, intéressé par le rajout de l'extension EPS. Si quelqu'un à la manip ;)

 

Merci d'avance

Share this post


Link to post
Share on other sites

Merci pour le temps que tu nous a accordé Misterpink ! C'est vraiment sympa de ta part, ça fais un moment qu'on attendait de l'aide la dessus.

Je testerais ça dès que j'ai du temps.

Merci et bonne année !

Share this post


Link to post
Share on other sites

  • 1 month later...

Bonjour,

Bonne année..........

 

voici la soluce pour pouvoir telecharger des pdf, des zip, des psd,des ai sur prestashop 1.4.6.2 dans la personnalisation.

 

tout d'abord ProductController.php (racine du site/controller/ProductController.php)

 

renommez votre ancien fichier et via ftp placez celui la: ProductController.php

 

 

ensuite renommez via ftp images.inc.php et mettez celui la a la place images.inc.php

 

 

et ensuite dans votre dossier admin/displayImage.php renommez displayImage.php et remplacez par displayImage.php

 

et enfin dans le dossier admin/tabs/AdminOrders.php renommez AdminOrders.php et remplacez parAdminOrders.php

 

et derniere etape les vignettes du format du fichier telecharge

 

placer dans le dossier img a la racine de votre site ces 4 jpg (voir fichier zip)

img.zip

 

et n'oubliez pas de modifier la phrase dans product.tpl qui indique le format possible en telechargement.........

 

 

voila en esperant n'avoir rien oublié

 

misterpink

 

Merci pour ta solution, ça marche très bien pour le zip. J'ai toutefois 2 questions:

 

1- Comment augmente t-on la taille maxi des images téléchargeables, je ne trouve pas la variable!

 

2- Je voudrai ajouter 2 types de fichiers téléchargeables: les .nef et les .cr2 mais ça ne fonctionne pas.

 

Je mets tes fichiers que j'ai essayé de modifier:

 

ProductController.php:

if ($this->isZIP($file)) {
  $fileName = "Z" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the file upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'zip.jpg';
   }
   elseif ($this->isAI($file)) {
  $fileName = "A" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the file upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'ai.jpg';
   }
   elseif ($this->isPSD($file)) {
  $fileName = "S" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the file upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'psd.jpg';
   }
   elseif ($this->isPDF($file)) {
  $fileName = "P" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the image upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'pdf.jpg';

   }
   elseif ($this->isNEF($file)) {
  $fileName = "B" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the image upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'nef.jpg';
   }
   elseif ($this->isCR2($file)) {
  $fileName = "C" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the image upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'cr2.jpg';
   }
   else {
  $fileName = "J" . $fileName;
  if (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the image upload.');
   return false;
  }
  $oldfile = $tmpName;
   }

 

images.inc.php:

function isPicture($file, $types = NULL)
{
   /* Detect mime content type */
   $mimeType = false;
   if (!$types)
    $types = array('image/gif',
    'image/jpg',
    'image/jpeg',
    'image/pjpeg',
    'image/png',
    'image/x-png',
    'image/nef',
    'image/cr2',
    'application/pdf',
    'application/acrobat',
    'application/nappdf',
    'application/x-pdf',
    'application/vnd.pdf',
    'text/pdf',
    'text/x-pdf',
    'multipart/x-zip',
    'application/zip',
    'application/x-zip-compressed',
    'application/x-zip',
    'application/illustrator',
    'application/photoshop',
    'application/psd',
    'application/x-photoshop',
    'image/photoshop',
    'image/psd',
    'image/x-photoshop',
    'image/x-psd',
    'image/vnd.adobe.photoshop',
    'application/octet-stream');

 

displayImage.php:

if (isset($img) AND Validate::isMd5($img) AND isset($name) AND Validate::isGenericName($name) AND file_exists(_PS_UPLOAD_DIR_.$file))
{
   if ($type == "P") {
    header('Content-type: application/pdf');
    $ext = ".pdf";   
   } elseif ($type == "A") {
    header('Content-type: application/illustrator');
    $ext = ".ai";
   }elseif ($type == "Z") {
    header('Content-type: application/zip');
    $ext = ".zip";
   }elseif ($type == "S") {
    header('Content-type: application/photoshop');
    $ext = ".psd";
   }elseif ($type == "J") {
    header('Content-type: image/jpeg');
    $ext = ".jpg";
   }elseif ($type == "J") {
    header('Content-type: image/jpeg');
    $ext = ".jpg";
   }elseif ($type == "B") {
    header('Content-type: image/nef');
    $ext = ".nef";
   }elseif ($type == "C") {
    header('Content-type: image/cr2');
    $ext = ".cr2";
   }

Share this post


Link to post
Share on other sites

Bonjour,

je crois que tu as oublié dans productcontroller.php ceci :

 

public function isNEF($file)
{
	$name = $file['name'];
	$ext = strrchr($name, '.');
	//echo '<br />pdf-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

	 if($ext == '.nef'){
		$isNEF = true;
	}else{
		$isNEF = false;
	}
	return $isNEF;
}
public function isCR2($file)
{
	$name = $file['name'];
	$ext = strrchr($name, '.');
	//echo '<br />pdf-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

	 if($ext == '.cr2'){
		$isCR2 = true;
	}else{
		$isCR2 = false;
	}
	return $isCR2;
}

tu colles les lignes ci dessus juste après ce code,

public function displayContent()
{
	parent::displayContent();
	self::$smarty->display(_PS_THEME_DIR_.'product.tpl');
}

et avant

public function isPDF($file)
{
	$name = $file['name'];
	$ext = strrchr($name, '.');
	//echo '<br />pdf-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

	 if($ext == '.pdf'){
		$isPDF = true;
	}else{
		$isPDF = false;
	}
	return $isPDF;
}

public function isZIP($file)
{
	/* Detect mime content type */
	$name = $file['name'];
	$ext = strrchr($name, '.');
	//echo '<br />zip-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

	if($ext == '.zip'){
		$isZIP = true;
	}else{
		$isZIP = false;
	}
	return $isZIP;
}

public function isAI($file){
	/* Detect mime content type */
	$name = $file['name'];
	$ext = strrchr($name, '.');
	//echo '<br />ai-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

	if($ext == '.ai'){
		$isAI = true;
	}else{
		$isAI = false;
	}
	return $isAI;

}

public function isPSD($file){
	/* Detect mime content type */
	$name = $file['name'];
	$ext = strrchr($name, '.');
	//echo '<br />psd-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

	if($ext == '.psd'){
		$isPSD = true;
	}else{
		$isPSD = false;
	}
	return $isPSD;

}

 

J’espère que c'est cela car aujourd'hui j'ai la creve du coup j'ai pas de cerveau....

Share this post


Link to post
Share on other sites

Pour le mime type a priori oui! les fichiers .nef et .cr2 correspondent aux fichiers des appareils photo Nikon et Canon!

 

Alors sinon, j'avais bien rempli les champs que tu as indiqué dans le productcontroller.php Je l'ai ai mis avant et non après comme tu l'as écrit mais ça ne changeait rien.

 

Par contre, comme ce type de fichier est lourd, je me suis plus penché sur le serveur et j'ai augmenté les données:

 

Sur le serveur dédié, le php.ini contient :

post_max_size = 150M

upload_max_filesize = 100M

max_execution_time = 60 (secondes)

max_input_time = 6000

memory_limit = 200M

 

Ca s'améliore parce qu'avant, quand j'uploadais un .nef, il ne se passait rien alors que maintenant, j'ai le message suivant:

 

l'image est trop grande (11906.331Ko). Taille max. : 131.072Ko

 

Donc là pour le coup, je pense que je dois changer la taille dans l'un de tes fichiers mais je ne vois pas lequel.......

 

Moi aussi, j'ai la crève, c'est clair que c'est chaud de coder dans ces conditions, je veux des vacances!!!!

Share this post


Link to post
Share on other sites

Je viens d'augmenter la taille des fichiers dans le BO: Back Office > Préférences > Produit pour ceux qui cherchent.

 

Alors nouveau message:

Image format not recognized, allowed formats are: .gif, .jpg, .png, .pdf, .psd, .ai, .zip, .nef, .cr2

Share this post


Link to post
Share on other sites

Voici mon ProductController.php :

public function displayContent()
{
 parent::displayContent();
 self::$smarty->display(_PS_THEME_DIR_.'product.tpl');
}

public function isNEF($file)
    {
		    $name = $file['name'];
		    $ext = strrchr($name, '.');
		    //echo '<br />pdf-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

			 if($ext == '.nef'){
				    $isNEF = true;
		    }else{
				    $isNEF = false;
		    }
		    return $isNEF;
    }
public function isCR2($file)
    {
		    $name = $file['name'];
		    $ext = strrchr($name, '.');
		    //echo '<br />pdf-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

			 if($ext == '.cr2'){
				    $isCR2 = true;
		    }else{
				    $isCR2 = false;
		    }
		    return $isCR2;
    }

public function isPDF($file)
{
 $name = $file['name'];
 $ext = strrchr($name, '.');
 //echo '<br />pdf-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

  if($ext == '.pdf'){
  $isPDF = true;
 }else{
  $isPDF = false;
 }
 return $isPDF;
}

public function isZIP($file)
{
 /* Detect mime content type */
 $name = $file['name'];
 $ext = strrchr($name, '.');
 //echo '<br />zip-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

 if($ext == '.zip'){
  $isZIP = true;
 }else{
  $isZIP = false;
 }
 return $isZIP;
}

public function isAI($file){
 /* Detect mime content type */
 $name = $file['name'];
 $ext = strrchr($name, '.');
 //echo '<br />ai-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

 if($ext == '.ai'){
  $isAI = true;
 }else{
  $isAI = false;
 }
 return $isAI;

}

public function isPSD($file){
 /* Detect mime content type */
 $name = $file['name'];
 $ext = strrchr($name, '.');
 //echo '<br />psd-DEBUG file===><pre>'.print_r($file);echo '</pre><br />DEBUG mimetpye===>'.$ext;

 if($ext == '.psd'){
  $isPSD = true;
 }else{
  $isPSD = false;
 }
 return $isPSD;

}

 

Avec plus bas:

if ($this->isZIP($file)) {
  $fileName = "Z" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the file upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'zip.jpg';
   }
   elseif ($this->isAI($file)) {
  $fileName = "A" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the file upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'ai.jpg';
   }
   elseif ($this->isPSD($file)) {
  $fileName = "S" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the file upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'psd.jpg';
   }
   elseif ($this->isPDF($file)) {
  $fileName = "P" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the image upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'pdf.jpg';

   }
   elseif ($this->isNEF($file)) {
  $fileName = "B" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the image upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'nef.jpg';
   }
   elseif ($this->isCR2($file)) {
  $fileName = "C" . $fileName;
  if (!rename($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the image upload.');
   return false;
  }
  //echo 'nom temporaire===>'.$tmpName;
  $oldfile = _PS_IMG_DIR_.'cr2.jpg';
   }
   else {
  $fileName = "J" . $fileName;
  if (!imageResize($tmpName, _PS_UPLOAD_DIR_.$fileName)) {
	  $errors[] = Tools::displayError('An error occurred during the image upload.');
   return false;
  }
  $oldfile = $tmpName;
   }

 

Voici ce que j'ai mis dans le images.inc.php :

function isPicture($file, $types = NULL)
{
   /* Detect mime content type */
   $mimeType = false;
   if (!$types)
    $types = array('image/gif',
    'image/jpg',
    'image/jpeg',
    'image/pjpeg',
    'image/png',
    'image/x-png',
    'image/nef',
    'image/cr2',
    'application/pdf',
    'application/acrobat',
    'application/nappdf',
    'application/x-pdf',
    'application/vnd.pdf',
    'text/pdf',
    'text/x-pdf',
    'multipart/x-zip',
    'application/zip',
    'application/x-zip-compressed',
    'application/x-zip',
    'application/illustrator',
    'application/photoshop',
    'application/psd',
    'application/x-photoshop',
    'image/photoshop',
    'image/psd',
    'image/x-photoshop',
    'image/x-psd',
    'image/vnd.adobe.photoshop',
    'application/octet-stream');
   /* Try 4 different methods to determine the mime type */
   if (function_exists('finfo_open'))
   {
    $const = defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME;
    $finfo = finfo_open($const);
	 $mimeType = finfo_file($finfo, $file['tmp_name']);
    finfo_close($finfo);
   }
   elseif (function_exists('mime_content_type'))
    $mimeType = mime_content_type($file['tmp_name']);
   elseif (function_exists('exec'))
   {
    $mimeType = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name'])));
    if (!$mimeType)
	    $mimeType = trim(exec('file --mime '.escapeshellarg($file['tmp_name'])));
    if (!$mimeType)
	    $mimeType = trim(exec('file -bi '.escapeshellarg($file['tmp_name'])));
   }
   if (empty($mimeType) OR $mimeType == 'regular file' OR $mimeType == 'text/plain')
    $mimeType = $file['type'];
   /* For each allowed MIME type, we are looking for it inside the current MIME type */
   foreach ($types AS $type)
    if (strstr($mimeType, $type))
	    return true;

 

...le displayImage.php:

$name = $_GET['name'];
$file = $_GET['img'];
require_once(dirname(__FILE__).'/../config/config.inc.php');
require_once(dirname(__FILE__).'/init.php');
$type = substr($file, 0, 1);
$img = substr($file, 1);
if (isset($img) AND Validate::isMd5($img) AND isset($name) AND Validate::isGenericName($name) AND file_exists(_PS_UPLOAD_DIR_.$file))
{
   if ($type == "P") {
    header('Content-type: application/pdf');
    $ext = ".pdf";   
   } elseif ($type == "A") {
    header('Content-type: application/illustrator');
    $ext = ".ai";
   }elseif ($type == "Z") {
    header('Content-type: application/zip');
    $ext = ".zip";
   }elseif ($type == "S") {
    header('Content-type: application/photoshop');
    $ext = ".psd";
   }elseif ($type == "J") {
    header('Content-type: image/jpeg');
    $ext = ".jpg";
   }elseif ($type == "J") {
    header('Content-type: image/jpeg');
    $ext = ".jpg";
   }elseif ($type == "B") {
    header('Content-type: image/nef');
    $ext = ".nef";
   }elseif ($type == "C") {
    header('Content-type: image/cr2');
    $ext = ".cr2";
   }

   header('Content-Disposition: attachment; filename="'.$name.$ext.'"');
   echo file_get_contents(_PS_UPLOAD_DIR_.$file);
}else{
$file_exists = 0;
$isMd5 = 0;
$isGenericName = 0;
if(file_exists(_PS_UPLOAD_DIR_.$file)){
 $file_exists = 1;
}
if(Validate::isMd5($img)){
 $isMd5 = 1;
}
if(Validate::isGenericName($name)){
 $isGenericName = 1;
}
echo 'POBLEME !!!<br />img:'.$img.' name : '.$name.'file_exists : '.$file_exists.'isMd5 : '.$isMd5.'isGenericName : '.$isGenericName;
}

 

Je n'ai rien changé à AdminOrders.php par contre, je ne crois pas que c'était nécessaire...

Share this post


Link to post
Share on other sites

  • 3 months later...

Je sais aps si la solution de MisterPink marche mais sa fait bugger le changement de prix des declinaison :s

 

Edit : Sa marche, mais, a chaque fois que je charge un fichier sa me fais :

Une erreur est survenue pendant le chargement de l'image

Edited by frosties (see edit history)

Share this post


Link to post
Share on other sites

  • 1 month later...
  • 2 weeks later...

Tout d'abord merci infiniment ! je galéré vraiment pour pouvoir accepter plusieurs types de fichiers sur l'upload (je suis débutant dans le php ^_^ ) Par contre j'ai deux petits soucis dans le cas où le client veut envoyer des fichiers..

 

Dans mon cas quand j'ai suivi le tuto de Misterpink, modification des fichiers ect.. mais seulement les fichiers jpg sont acceptés :(

 

si sa peut aider je suis sur la version 1.4.8

 

merci :P

Edited by travisti (see edit history)

Share this post


Link to post
Share on other sites

typiac : J'espère que tu as trouvé une solution depuis ton dernier post, mais au cas ou ça intéresse d'autres personnes, je te réponds quand même. J'en suis pas certain, mais il me semble que le Mime type que tu utilises pour tes fichier n'est pas le bon. Par exemple, pour cr2, c'est 'image/x-raw' et pas 'image/cr2'.

 

Essaye donc de corriger ça dans ton fichier images.inc.php !

Share this post


Link to post
Share on other sites

  • 3 weeks later...
  • 2 months later...
  • 1 month later...
  • 2 weeks later...
  • 2 months later...

Je suis également à la recherche d'une solution pour proposer l'envoi de fichier type .eps ou .ai sous PS 1.5.

 

A priori il doit falloir toucher à :

- product.tpl : pour ajouter les types de fichier souhaités vers la ligne

 <form method="post" action="{$customizationFormTarget}" enctype="multipart/form-data" id="customizationForm">

<p>
<img src="{$img_dir}icon/infos.gif" alt="Informations" />
{l s='After saving your customized product, remember to add it to your cart.'}
{if $product->uploadable_files}<br />{l s='Allowed file formats are: GIF, JPG, PNG'}{/if}
</p>

 

- J'ai cru comprendre que le fichier displayImage.php devrait sans doute être modifié.

 

- Quand au fichier "images.inc.php", il est devenu obsolète sous PS 1.5 ?

 

Si certains d'autres vous ont des pistes !

  • Like 1

Share this post


Link to post
Share on other sites

  • 1 month later...
  • 2 weeks later...
  • 4 weeks later...

Une idée pour autoriser l'envoi de fichier zip ou pdf sur 1.5.3 ?

J'ai cherché aucun module ne le permet dans la partie personnalisations.

Un seul module fait un travail similaire: FilesUpload

Share this post


Link to post
Share on other sites

Hello, je développe un nouveau module et j'ai justement besoins d'uploader un format non supporté sous 1.5. Au passage je peut rajouter des options pour pouvoir supporter le type de fichier qu'ont veut.

 

Cordialement

Share this post


Link to post
Share on other sites

Hello,

 

il va falloir attendre un peu, le module à été commencé il y a deux jours et il y a beaucoup de choses à faire. En fait j'adapte le nouveau format d'image webp de google pour prestashop, histoire d'avoir un gain de bande passante entre 30 et 50%. Comme le module touche à l'upload de fichier au passage je touche à ce que vous voulez modifier.

 

Il va falloir encore attendre une petite semaine pour qu'il soit dispo au moins sur ma boutique, et 3 pour le prestastore. Cordialement

Share this post


Link to post
Share on other sites

  • 3 months later...
  • 3 months later...
  • 11 months later...
  • 2 years later...
  • 8 months later...
  • 1 month later...
  • 4 months later...

Je fais un petit up sur ce sujet. Quelqu'un a t-il trouvé la solution pour que le client puisse uploader des fichiers pdf sur la page personnalisation du produit et non des images pour Prestashop 1.7? Merci

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More