【发布时间】:2016-04-05 16:04:54
【问题描述】:
我是一名新开发人员,在一家网站公司工作。我们在导入 excel 文件时遇到了一个错误,它不接受 xls 作为有效的扩展名,但可以接受 xlsx 和其他文件。这是给出错误的方法。
公共函数 orderAddUpload(Request $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 方法,并进一步研究了它使用的guessMimeType,但这些方法似乎一切正常。
当我注释掉 Exception'file.invalid.extension' 并尝试导入 xls 文件时,我得到的错误告诉我文件类型列不能为 NULL,这与 SQL 有关。
如果有人知道此类问题,请告诉我,谢谢!
【问题讨论】:
标签: php excel symfony import xls