无法导入 .xls - Symfony PHP

Unable to import .xls - Symfony PHP

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

public 函数 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 文件时,它 returns 将扩展名设为 NULL 而不是 xls,并抛出异常“file.invalid.extension”。

我不明白为什么会这样,因为 xls 是 $valid_ext 数组中定义为有效的扩展之一。该数组中的所有其他扩展都可以毫无问题地导入。我深入研究了 guessExtension 方法,并进一步研究了它使用的 guessMimeType,但在这些方法中似乎一切正常。

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

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

使用 getExtension() 方法代替 guessExtension()getExtension() returns 基于文件名称的文件扩展名,而另一种方法 returns 基于 mime 类型的文件扩展名。

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