2016-04-05 1 views
0

Je suis un nouveau développeur qui travaille dans une entreprise sur un site Web. Nous avons un bug avec l'importation de fichiers Excel, il n'accepte pas xls comme une extension valide, mais xlsx et d'autres sont acceptés. Voici la méthode qui donne l'erreur.Impossible d'importer .xls - PHP Symfony

fonction publique orderAddUpload (Demande $ request) {

/* 
    Filepath: /web/uploads/files/{entity_name}/{entity_id}/{filename} 
    */ 

    $response = array(); 

    $entity = $request->request->get('upload_entity'); 
    $id  = $request->request->get('upload_id'); 
    $user = $this->get('security.context')->getToken()->getUser(); 

    $em = $this->getDoctrine()->getManager(); 

    $valid_ext = array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'txt', 'gif', 'jpg', 'jpeg', 'png'); 

    $file = $request->files->get('files'); 
    if(is_array($file)) $file = reset($file); 


    try{ 
     if(empty($file)){ 
      throw new Exception($this->get('translator')->trans('upload.failure'), 1); 
     } 

     if(! in_array($file->guessExtension(), $valid_ext)){ 
      throw new Exception($this->get('translator')->trans('file.invalid.extension')." (" . $file->guessExtension() . "), ".$this->get('translator')->trans('only')." ".implode(', ', $valid_ext) . " ".$this->get('translator')->trans('are.accepted').".", 2); 
     } 

     $upload = new Upload(); 
     $upload 
      ->setFiletype($file->guessExtension()) 
      ->setEntityName($entity) 
      ->setEntityId($id) 
      ->setUploader($user); 

     $name = basename($file->getClientOriginalName(), '.' . $file->getClientOriginalExtension()); 
     $ext  = $file->guessExtension(); 
     $counter = 1; 

     $newname = "{$name}.{$ext}"; 

     while(file_exists($newname)){ 
      $newname = "{$name}_{$counter}.{$ext}"; 
      $counter++; 
     } 

     $upload->setFilename($newname); 

     $file->move($upload->getFilePath(), $upload->getFilename()); 

     $em->persist($upload); 
     $em->flush(); 


    }catch(Exception $e){ 
     return new Response(json_encode(array('type' => 'error', 'message' => $e->getMessage(),))); 
    } 

    $response['code'] = 'uploaded'; 

    return new Response(json_encode($response)); 
} 

Pour autant que je peux dire, lorsque je tente d'importer un fichier xls, il retourne l'extension NULL au lieu comme xls et lève l'exception » file.invalid.extension '.

Je ne comprends pas pourquoi cela se passe parce que xls est l'un des exentions définis comme valides dans le tableau de valid_ext de $. Toutes les autres extensions de ce tableau sont importées sans problème. J'ai creusé dans la méthode guessExtension et plus loin dans guessMimeType qu'il utilise, mais tout semble fonctionner correctement dans ceux-ci. Lorsque je commente Exception'file.invalid.extension 'et que j'essaie d'importer le fichier xls, l'erreur que je reçois me dit que la colonne du type de fichier ne peut pas être NULL, quelque chose à voir avec SQL.

Si quelqu'un sait quelque chose sur ce type de problème s'il vous plaît laissez-moi savoir, merci!

Répondre

0

Pour toute personne qui pourrait regarder à l'avenir, je trouve le problème. Fondamentalement, le type xls mime dans Symfony est obsolète et faux. guessExtension appelle guessMimeType pour déterminer le type mime du fichier importé, puis guessExtension utilise le type mime retourné par guessMimeType pour deviner une extension. La méthode guessExtension fait référence à une liste de types MIME pour le faire, et le problème était que le type xls mime dans cette liste était faux, probablement juste obsolète. J'ai trouvé le type MIME actuel xls et remplacé celui de la liste par le bon et cela a fonctionné

0

méthode Utilisation getExtension() au lieu de guessExtension(). getExtension() renvoie l'extension d'un fichier en fonction de son nom, tandis que l'autre méthode renvoie l'extension de fichier en fonction du type mime.

+0

Merci pour la réponse. J'aurais dû mentionner que j'ai déjà essayé getExtension et j'ai malheureusement eu les mêmes résultats. –