无法导入.xls-Symfony PHP


Unable to import .xls - Symfony PHP

我是一名新开发人员,在一家网站公司工作。我们在导入excel文件时有一个错误,它不接受xls作为有效的扩展名,但接受xlsx和其他扩展名。这是给出错误的方法。

公共函数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,并抛出Exception"file.invalid.extension"。

我不明白为什么会发生这种情况,因为xls是$valid_ext数组中定义为有效的示例之一。该数组中的所有其他扩展都可以顺利导入。我深入研究了guessExtension方法,并进一步研究了它使用的guessTimeType,但在这些方法中似乎一切都很好。

当我注释掉Exception"file.invalid.extension"并尝试导入xls文件时,我得到的错误告诉我文件类型列不能为NULL,这与SQL有关。

如果有人知道这类问题,请告诉我,谢谢!

使用getExtension()方法而不是guessExtension()getExtension()根据文件名返回文件扩展名,而另一种方法则根据mime类型返回文件扩展。

对于将来可能会看到这个问题的人来说,我发现了这个问题。基本上,Symfony中的xls-mime类型已经过时并且是错误的。guessExtension调用guessTimeType来计算导入的文件的mime类型,然后guessExtention使用guessimeType返回的mime型来猜测扩展名。guessExtension方法引用了一个mime类型列表来执行此操作,问题是该列表中的xls-mime类型是错误的,很可能只是过时了。我找到了当前的xls-mime类型,并用好的类型替换了列表中的类型,它在中工作