2016-04-05 3 views
0

Я - новый разработчик, работающий в компании на веб-сайте. У нас есть ошибка при импорте файлов excel, она не принимает xls как действительное расширение, но xlsx и другие принимаются. Вот метод, который дает ошибку.Невозможно импортировать .xls - Symfony PHP

общественная функция orderAddUpload (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)); 
} 

Насколько я могу сказать, когда я пытаюсь импортировать файл XLS возвращает расширение как NULL вместо как XLS и бросает исключение» file.invalid.extension.

Я не понимаю, почему это происходит, потому что xls является одним из исключений, определенных как действительные в массиве $ valid_ext. Все остальные расширения в этом массиве импортируются без проблем. Я врывался в метод guessExtension и далее в gtMType, который он использует, но все, кажется, работает отлично.

Когда я комментирую Exception'file.invalid.extension 'и пытаюсь импортировать файл xls, я получаю сообщение о том, что столбец типа файла не может быть NULL, что-то связанное с SQL.

Если кто-нибудь знает что-нибудь об этом типе проблем, пожалуйста, дайте мне знать, спасибо!

ответ

0

Для всех, кто мог бы взглянуть на это в будущем, я нашел проблему. В принципе, тип xls mime в Symfony устарел и ошибочен. guessExtension вызывает метод guessMimeType, чтобы выяснить тип mime импортируемого файла, а затем guessExtension использует тип mime, возвращаемый методом guessMimeType, чтобы угадать расширение. Метод guessExtension ссылается на список типов mime, чтобы сделать это, и было показано, что тип mime xls в этом списке был неправильным, скорее всего, просто устаревшим. Я нашел текущий тип xls mime и заменил один в списке на хороший, и он работал

0

Использовать метод getExtension() вместо guessExtension(). getExtension() возвращает расширение файла на основе его имени, тогда как другой метод возвращает расширение файла на основе типа mime.

+0

Спасибо за ответ. Я должен был упомянуть, что я уже пробовал getExtension, и, к сожалению, получил те же результаты. –

Смежные вопросы