Skip to content

Latest commit

 

History

History
137 lines (123 loc) · 4.4 KB

UploadFile.md

File metadata and controls

137 lines (123 loc) · 4.4 KB

Upload File

  • 图片的ajax上传

       /**
       * ajax upload file
       *
       * @param Request $request
       * @return \Symfony\Component\HttpFoundation\JsonResponse
       */
      public function uploadAction(Request $request)
      {
        
          /**
           * @var $image \Symfony\Component\HttpFoundation\File\UploadedFile
           */
          $image = $request->files->get('upfile'); // 图片的name
          if($image instanceof UploadedFile){
              $name = $image->getClientOriginalName();
              $size = $image->getSize();
              $type = $image->guessClientExtension();
              $result = $this->get('kit.file_uploader')->upload($image, 'image/' . date('Y/m'));
              if($result['code'] == 1){
                  return $this->json([
                      "originalName" => $name,
                      "name" => $name,
                      "url" => '/'.$result['data'],
                      "size" => $size,
                      "type" => "." . $type,
                      "state" => "SUCCESS"
                  ]);
              }else{
                  return $this->json([
                      'state' => 'FAILD'
                  ]);
              }
          }else{
              return $this->json([
                  "originalName" => '',
                  "name" => '',
                  "url" => '',
                  "size" => '',
                  "type" => '',
                  "state" => "图片不能为空"
              ]);
          }
      }
    
  • 表单图片上传

    • 编写图片上传service

        namespace KitBaseBundle\Service;
      
        use Symfony\Component\HttpFoundation\File\UploadedFile;
        
        class FileUploader
        {
            private $targetDir;
        
            public function __construct($targetDir)
            {
                $this->targetDir = $targetDir;
            }
            
            public function upload(UploadedFile $file, $subDir = '')
            {
                $fileName = md5(uniqid()).'.'.$file->guessExtension();
                $subDir = empty($subDir) ? '' : '/'. $subDir;
                try {
                    $file->move($this->targetDir . $subDir, $fileName);
                    $file->getPath();
                }catch (\Exception $e){
                    return [
                        'code' => 0,
                        'data' => $e->getCode() . $e->getMessage()
                    ];
                }
                
                return [
                    'code' => 1,
                    'data' => 'uploads' .$subDir . '/' .$fileName
                ];
            }
            
        }	
      
    • Entity上配置断言

        /**
         * @var string
         *
         * @ORM\Column(name="thumb", type="string", length=255, nullable=true, options={"comment": "配图"})
         * @Assert\File(
         *              maxSize = "10M",
         *              mimeTypes={ "image/png", "image/jpeg", "image/jpg", "image/gif" }, 
         *              mimeTypesMessage = "图片格式不支持"
         * )
         */
        private $thumb;
      
    • form builder

        >add('thumb', FileType::class, [
            'label' => '标题图片',
            'data_class' => null
        ])
      
    • 上传处理

        $form->handleRequest($request);
        if ($form->isSubmitted()) {
            if($form->isValid()){
                /**
                 * @var \KitNewsBundle\Entity\News $news 
                 */
                $news = $form->getData();
                if(empty($news->getIntroduction())){
                    $news->setIntroduction(mb_substr(strip_tags($news->getContent()), 0, 120));
                }
                $news->setHits(0);
                $image = $news->getThumb();
                if($image instanceof UploadedFile) {
                    $fileName = $this->get('kit.file_uploader')->upload($image, 'image/' . date('Y/m'));
                    if($fileName['code'] == 1){
                        $news->setThumb($fileName['data']);
                        $em->persist($news);
                        $em->flush();
                        return $this->msgResponse(0, '恭喜', '添加成功', 'kit_news_list');
                    }else{
                        $errors[] = '文件上传失败';
                    }
                }else{
                    $em->persist($news);
                    $em->flush();
                    return $this->msgResponse(0, '恭喜', '添加成功', 'kit_news_list');
                }
                
            }else{
                $errors = $this->serializeFormErrors($form);
            }
        }