2016-04-05 6 views
0

私はウェブサイト上のある会社で働いている新しい開発者です。エクセルファイルをインポートする際にバグがありますが、有効なエクステンションとしてxlsを受け付けませんが、xlsxなどが受け入れられます。エラーを返す方法は次のとおりです。.xlsをインポートできません - symfony PHP

パブリック関数orderAddUpload(リクエスト$リクエスト){私の知る限り

/* 
    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ファイルをインポートしようとすると、ファイルタイプの列がSQLと関係があるとは限りません。

このタイプの問題について誰もが知っている場合は、教えてください、ありがとう!

答えて

0

これを将来見るかもしれない人にとって、私は問題を発見しました。基本的にsymfonyのxls mimeタイプは時代遅れで間違っています。 guessExtensionは、guessMimeTypeを呼び出して、インポートされたファイルのMIMEタイプを特定し、guessExtensionは、guessMimeTypeによって返されたMIMEタイプを使用して、拡張を推測します。 guessExtensionメソッドは、そうするためにMIMEタイプのリストを参照しています。そのリスト内のxls MIMEタイプが間違っていた可能性があります。私は現在のxls mimeタイプを見つけて、リストの中の1つを良いものに置き換えました。それはうまくいっています。

0

guessExtension()の代わりにgetExtension()メソッドを使用してください。 getExtension()は、名前に基づいてファイルの拡張子を返し、もう一方のメソッドはMIMEタイプに基づいてファイル拡張子を返します。

+0

ありがとうございます。私はすでにgetExtensionも試してみたが、残念なことに同じ結果を得たということを述べておきたい。 –

関連する問題