2017-06-20 14 views
2

私は、データベースにユーザーを保存するためにRestコンポーネントを書き込むプロジェクトで作業しています。また、コンポーネントは、サーバー上のフォルダー内にユーザーの写真を保存する必要があります。 JsonというパラメータをRest APIに送信します。json(FosRestBundle)内のパスでファイルをアップロード

これは百回続いたtutorialです。しかし、私はまだファイル「/home/herval/Desktop/zipf.pngは」

が新しい File(pathOfTheUploadedFile)をやろうとしたときに存在していない

エラーを取得します。それで、Rest Apiがローカルのファイルを見ているようです。 サーバにあるファイルを与えるときに、ファイルをコピーするのではなく移動させます。

誰か助けてもらえますか?ここで

は私のコードは次のとおりです。

コントローラー:

/** 
* @Rest\Post("") 
*/ 
public function mitgliedAnlegenRestAction(Request $request) 
{ 

    $parametersAsArray = []; 
    if ($content = $request->getContent()) { 
     $parametersAsArray = json_decode($content, true); 
    } 

    $mitglied_param = $parametersAsArray['mitglied']; 
    $token_param = $parametersAsArray['token']; 

    $repository = $this->getDoctrine() 
    ->getManager() 
    ->getRepository('OrchesterRestBundle:Mitglied'); 

    $ersteller = $repository->findOneBy(array('token'=>$token_param)); 

    $ant = new Antwort(); 

    if($ersteller == NULL){ 

     $ant->setCode(202); 
     $ant->setContent(NULL); 
     return $ant; 
    }else{ 

     if($ersteller->hasArt('ADMIN')){ 

      $repositoryG = $this->getDoctrine() 
      ->getManager() 
      ->getRepository('OrchesterRestBundle:Gruppe'); 

      $repositoryMG = $this->getDoctrine() 
      ->getManager() 
      ->getRepository('OrchesterRestBundle:MitgliedGruppe'); 

      $repositoryA = $this->getDoctrine() 
      ->getManager() 
      ->getRepository('OrchesterRestBundle:Art'); 

      $repositoryI = $this->getDoctrine() 
      ->getManager() 
      ->getRepository('OrchesterRestBundle:Instrument'); 

      $mitglied = new Mitglied($repositoryG); 
      $id = $mitglied->setValueFromJson($mitglied_param); 


      foreach($mitglied_param['arts'] as $artID){ 
       $art = $repositoryA->find($artID); 
       if($art != NULL) 
        $mitglied->addArt($art); 

      } 
      foreach($mitglied_param['instrumente'] as $instrumentID){ 
       $instrument = $repositoryI->find($instrumentID); 
       if($instrument != NULL) 
        $mitglied->addInstrumente($instrument); 

      } 

      if(($repository->findBy(array('username'=>$mitglied->getUsername())) != NULL 
        OR $repository->findBy(array('email'=>$mitglied->getEmail())) != NULL) 
        AND $request->isMethod('POST')){ 

         $ant->setCode(302); 
         $ant->setContent(NULL); 
         return $ant; 
      }else{ 


       $mitglied->setRegDatum(date_create('now')); 


       if($mitglied_param['photo'] != ''){ 
        $mitglied->setPhoto(
          new File($mitglied_param['photo']) 
          ); 
       } 
       $validator = $this->get('validator'); 
       $listErrors = $validator->validate($mitglied); 
       if(sizeof($listErrors) == 0){ 
        $auth = $this->container->get('orchester_rest.auth'); 
        $passwort= $auth->generate_token(15); 
        $mitglied->setPwd(md5($passwort)); 
        $mitglied->setMitgliedErsteller($ersteller); 

        //Upload photo 
        /** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */ 

        if($mitglied_param['photo'] != ''){ 
         $file = $mitglied->getPhoto(); 
         $fileName = md5(uniqid()).'.'.$file->guessExtension(); 
         $file->move(
           $this->getParameter('photos_directory'), 
           $fileName 
           ); 
         $mitglied->setPhoto($fileName); 
        } 

        $em = $this->getDoctrine()->getManager(); 

        if($request->isMethod('POST')){ 

         $em->persist($mitglied); 

         //Envoyer Email 
         $message = \Swift_Message::newInstance('Registrierung') 
         ->setSubject('Registrierung') 
         ->setFrom($this->getParameter('email_system')) 
         ->setTo($mitglied->getEmail()) 
         ->setBody($this->getParameter('salutation').", ".$mitglied->getVorname()." " 
           .strtoupper($mitglied->getNachname())."\n" 
           ."Dein Konto ist bereits erstellt. Da unten stehen deine Daten.\n\n" 
           ."\nVorname: ".ucfirst($mitglied->getVorname()) 
           ."\nNachname: ".ucfirst($mitglied->getNachname()) 
           ."\nGeburtsdatum: ".$mitglied->getGeburtsdatum()->format('d.m.Y') 
           ."\nEintrittsdatum: ".$mitglied->getEintrittsdatum()->format('d.m.Y') 
           ."\nRegistrierungsdatum: ".$mitglied->getRegDatum()->format('d.m.Y')." um ".$mitglied->getRegDatum()->format('H.i')."Uhr" 
           ."\n\n" 
           ."\nAdresse: ".ucfirst($mitglied->getStrasse())." ".$mitglied->getHausnummer()." ".$mitglied->getPlz()." ".ucfirst($mitglied->getStadt()) 
           ."\n\n" 
           ."\nEmail: ".$mitglied->getEmail() 
           ."\nBenutzername: ".$mitglied->getUsername() 
           ."\nPasswort: ".$passwort 
           ."\n\n" 
           ."Aus Sicherheitsgründen empfehlen wir Ihnen, Ihr Passwort so früh wie möglich zu ändern." 
           ."\n\n" 
           ."\n".$this->getParameter('schluss') 
           ."\n".$this->getParameter('team')); 
         $this->get('mailer')->send($message); 
        }else{ 
         $reg_mitglied = $repository->find($id); 
         if($reg_mitglied == NULL){ 
          $ant->setCode(301); 
          $ant->setContent($mitglied); 
          return $ant; 
         }else{ 
          $reg_mitglied->setValueFromMitglied($mitglied); 
          $em->flush(); 
          $ant->setCode(100); 
          $ant->setContent($reg_mitglied); 
          return $ant; 
         } 
        } 

        $em->flush(); 

        $ant->setCode(100); 
        $ant->setContent($mitglied); 
        return $ant; 
       }else{ 

        $ant->setCode(701); 
        $ant->setContent($listErrors); 
        return $ant; 
       } 
      } 
     }else{ 

      $ant->setCode(601); 
      $ant->setContent(NULL); 
      return $ant; 
     } 
    } 
} 

エンティティ

/** 
* Mitglied 
* 
* @ORM\Table(name="mitglied") 
* @ORM\Entity(repositoryClass="OrchesterRestBundle\Repository\MitgliedRepository") 
*/ 

class Mitglied 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 


/** 
* @var string 
* 
* @ORM\Column(name="username", type="string", length=15) 
* @Assert\Length(min=6, max=15) 
*/ 
private $username; 

/** 
* @var string 
* 
* @ORM\Column(name="email", type="string", length=100) 
* @Assert\Email 
*/ 
private $email; 

/** 
* @var string 
* 
* @ORM\Column(name="nachname", type="string", length=100, nullable=true) 
* @Assert\Length(min=2, max=100) 
*/ 
private $nachname; 

/** 
* @var string 
* 
* @ORM\Column(name="vorname", type="string", length=100, nullable=true) 
* @Assert\Length(min=2, max=100) 
*/ 
private $vorname; 

/** 
* @var string 
* 
* @ORM\Column(name="pwd", type="string", length=255) 
* @Assert\Length(min=6, max=30) 
*/ 
private $pwd; 

/** 
* @var string 
* 
* @ORM\Column(name="photo", type="string", length=255, nullable=true) 
* @Assert\File(mimeTypes={ "image/jpeg", "image/pjpeg", "image/png", "image/gif" }) 
*/ 
private $photo; 

/** 
* @var \Date 
* 
* @ORM\Column(name="eintrittsdatum", type="date", nullable=true) 
* @Assert\Date() 
*/ 
private $eintrittsdatum; 

/** 
* @var \Date 
* 
* @ORM\Column(name="geburtsdatum", type="date", nullable=true) 
* @Assert\Date() 
*/ 
private $geburtsdatum; 

/** 
* @var \DateTime 
* 
* @ORM\Column(name="reg_datum", type="datetime") 
*/ 
private $regDatum; 

/** 
* @var string 
* 
* @ORM\Column(name="token", type="string", length=255, nullable=true) 
*/ 
private $token; 

/** 
* @var int 
* 
* @ORM\Column(name="plz", type="integer", nullable=true) 
*/ 
private $plz; 

/** 
* @var string 
* 
* @ORM\Column(name="stadt", type="string", length=100, nullable=true) 
* @Assert\Length(min=2, max=100) 
*/ 
private $stadt; 

/** 
* @var string 
* 
* @ORM\Column(name="strasse", type="string", length=100, nullable=true) 
* @Assert\Length(min=3, max=100) 
*/ 
private $strasse; 

/** 
* @var string 
* 
* @ORM\Column(name="hausnummer", type="string", length=15, nullable=true) 
* @Assert\Length(min=1, max=15) 
*/ 
private $hausnummer; 

/** 
* @ORM\ManyToOne(targetEntity="OrchesterRestBundle\Entity\Mitglied", cascade={"persist", "remove"}) 
*/ 
private $MitgliedErsteller; 

/** 
* @ORM\ManyToMany(targetEntity="OrchesterRestBundle\Entity\Art", cascade={"persist", "remove"}) 
*/ 
private $arts; 

/** 
* @ORM\ManyToMany(targetEntity="OrchesterRestBundle\Entity\Instrument", cascade={"persist", "remove"}) 
*/ 
private $instrumente; 

/** 
* @ORM\OneToMany(targetEntity="OrchesterRestBundle\Entity\MitgliedGruppe",cascade={"persist", "remove"}, mappedBy="mitglied") 
* @ORM\JoinColumn(nullable=true) 
*/ 
private $mitglied_gruppen; 

/** 
* Constructor 
*/ 
public function __construct($gruppeRepository = NULL) 
{ 
    $this->arts = new \Doctrine\Common\Collections\ArrayCollection(); 
    $this->instrumente = new \Doctrine\Common\Collections\ArrayCollection(); 
    $this->mitglied_gruppen = new \Doctrine\Common\Collections\ArrayCollection(); 

    if($gruppeRepository != NULL){ 
     $gruppen = $gruppeRepository->findFromName('ALL'); 
     if($gruppen != NULL) 
      if($gruppen[0] != NULL){ 
        $mg = new MitgliedGruppe(); 
        $mg->setBeitreten(true); 
        $mg->setGruppe($gruppen[0]); 
        $mg->setDatum(date_create('now')); 
        $mg->setMitglied($this); 
        $this->addMitgliedGruppen($mg); 
      } 
    } 
} 

/** 
* Add art 
* 
* @param \OrchesterRestBundle\Entity\Art $art 
* 
* @return Mitglied 
*/ 
public function addArt(\OrchesterRestBundle\Entity\Art $art) 
{ 
    if(!$this->arts->contains($art)) 
     $this->arts[] = $art; 

    return $this; 
} 

/** 
* Remove art 
* 
* @param \OrchesterRestBundle\Entity\Art $art 
*/ 
public function removeArt(\OrchesterRestBundle\Entity\Art $art) 
{ 
    $this->arts->removeElement($art); 
} 

/** 
* Get arts 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getArts() 
{ 
    return $this->arts; 
} 

/** 
* Set arts 
* 
* @param \Doctrine\Common\Collections\Collection $arts 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function setArts($arts) 
{ 
    return $this->arts = $arts; 
} 

/** 
* Add instrumente 
* 
* @param \OrchesterRestBundle\Entity\Instrument $instrumente 
* 
* @return Mitglied 
*/ 
public function addInstrumente(\OrchesterRestBundle\Entity\Instrument $instrumente) 
{ 
    if(!$this->instrumente->contains($instrumente)) 
     $this->instrumente[] = $instrumente; 

    return $this; 
} 

/** 
* Remove instrumente 
* 
* @param \OrchesterRestBundle\Entity\Instrument $instrumente 
*/ 
public function removeInstrumente(\OrchesterRestBundle\Entity\Instrument $instrumente) 
{ 
    $this->instrumente->removeElement($instrumente); 
} 

/** 
* Get instrumente 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getInstrumente() 
{ 
    return $this->instrumente; 
} 

/** 
* Set instrumente 
* 
* @param \Doctrine\Common\Collections\Collection $instrumente 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function setInstrumente($instrumente) 
{ 
    return $this->instrumente = $instrumente; 
} 

public function setValueFromJson($json_object){ 
    $this->setUsername($json_object['username']); 
    $this->setEmail($json_object['email']); 
    $this->setNachname($json_object['nachname']); 
    $this->setVorname($json_object['vorname']); 
    $this->setPwd($json_object['pwd']); 


    $this->setEintrittsdatum(date_create($json_object['eintrittsdatum'])); 
    $this->setGeburtsdatum(date_create($json_object['geburtsdatum'])); 
    $this->setToken($json_object['token']); 
    $this->setPlz($json_object['plz']); 
    $this->setStadt($json_object['stadt']); 
    $this->setStrasse($json_object['strasse']); 
    $this->setHausnummer($json_object['hausnummer']); 

    if(isset($json_object['id'])) 
     return $json_object['id']; 
    return 0; 
} 

/** 
* Set mitgliedErsteller 
* 
* @param \OrchesterRestBundle\Entity\Mitglied $mitglied 
* 
* @return Mitglied 
*/ 
public function setValueFromMitglied($mitglied){ 

    $this->setUsername($mitglied->username); 
    $this->setEmail($mitglied->email); 
    $this->setNachname($mitglied->nachname); 
    $this->setVorname($mitglied->vorname); 
    $this->setPwd($mitglied->pwd); 
    $this->setPhoto($mitglied->photo); 
    $this->setEintrittsdatum($mitglied->eintrittsdatum); 
    $this->setGeburtsdatum($mitglied->geburtsdatum); 
    $this->setRegDatum($mitglied->regDatum); 
    $this->setToken($mitglied->token); 
    $this->setPlz($mitglied->plz); 
    $this->setStadt($mitglied->stadt); 
    $this->setStrasse($mitglied->strasse); 
    $this->setHausnummer($mitglied->hausnummer); 

    $this->setArts($mitglied->getArts()); 
    $this->setInstrumente($mitglied->getInstrumente()); 
} 

public function hasArt($g_art){ 
    $artArray = $this->arts->toArray(); 
    foreach($artArray as $art) 
     if($art->getName() == $g_art) 
      return true; 
    return false; 
} 

/** 
* Get id 
* 
* @return integer 
*/ 
public function getId() 
{ 
    return $this->id; 
} 

/** 
* Set username 
* 
* @param string $username 
* 
* @return Mitglied 
*/ 
public function setUsername($username) 
{ 
    $this->username = $username; 

    return $this; 
} 

/** 
* Get username 
* 
* @return string 
*/ 
public function getUsername() 
{ 
    return $this->username; 
} 

/** 
* Set email 
* 
* @param string $email 
* 
* @return Mitglied 
*/ 
public function setEmail($email) 
{ 
    $this->email = $email; 

    return $this; 
} 

/** 
* Get email 
* 
* @return string 
*/ 
public function getEmail() 
{ 
    return $this->email; 
} 

/** 
* Set nachname 
* 
* @param string $nachname 
* 
* @return Mitglied 
*/ 
public function setNachname($nachname) 
{ 
    $this->nachname = $nachname; 

    return $this; 
} 

/** 
* Get nachname 
* 
* @return string 
*/ 
public function getNachname() 
{ 
    return $this->nachname; 
} 

/** 
* Set vorname 
* 
* @param string $vorname 
* 
* @return Mitglied 
*/ 
public function setVorname($vorname) 
{ 
    $this->vorname = $vorname; 

    return $this; 
} 

/** 
* Get vorname 
* 
* @return string 
*/ 
public function getVorname() 
{ 
    return $this->vorname; 
} 

/** 
* Set pwd 
* 
* @param string $pwd 
* 
* @return Mitglied 
*/ 
public function setPwd($pwd) 
{ 
    $this->pwd = $pwd; 

    return $this; 
} 

/** 
* Get pwd 
* 
* @return string 
*/ 
public function getPwd() 
{ 
    return $this->pwd; 
} 

/** 
* Set photo 
* 
* @param string $photo 
* 
* @return Mitglied 
*/ 
public function setPhoto($photo) 
{ 
    $this->photo = $photo; 

    return $this; 
} 

/** 
* Get photo 
* 
* @return string 
*/ 
public function getPhoto() 
{ 
    return $this->photo; 
} 

/** 
* Set eintrittsdatum 
* 
* @param \DateTime $eintrittsdatum 
* 
* @return Mitglied 
*/ 
public function setEintrittsdatum($eintrittsdatum) 
{ 
    $this->eintrittsdatum = $eintrittsdatum; 

    return $this; 
} 

/** 
* Get eintrittsdatum 
* 
* @return \DateTime 
*/ 
public function getEintrittsdatum() 
{ 
    return $this->eintrittsdatum; 
} 

/** 
* Set geburtsdatum 
* 
* @param \DateTime $geburtsdatum 
* 
* @return Mitglied 
*/ 
public function setGeburtsdatum($geburtsdatum) 
{ 
    $this->geburtsdatum = $geburtsdatum; 

    return $this; 
} 

/** 
* Get geburtsdatum 
* 
* @return \DateTime 
*/ 
public function getGeburtsdatum() 
{ 
    return $this->geburtsdatum; 
} 

/** 
* Set regDatum 
* 
* @param \DateTime $regDatum 
* 
* @return Mitglied 
*/ 
public function setRegDatum($regDatum) 
{ 
    $this->regDatum = $regDatum; 

    return $this; 
} 

/** 
* Get regDatum 
* 
* @return \DateTime 
*/ 
public function getRegDatum() 
{ 
    return $this->regDatum; 
} 

/** 
* Set token 
* 
* @param string $token 
* 
* @return Mitglied 
*/ 
public function setToken($token) 
{ 
    $this->token = $token; 

    return $this; 
} 

/** 
* Get token 
* 
* @return string 
*/ 
public function getToken() 
{ 
    return $this->token; 
} 

/** 
* Set plz 
* 
* @param integer $plz 
* 
* @return Mitglied 
*/ 
public function setPlz($plz) 
{ 
    $this->plz = $plz; 

    return $this; 
} 

/** 
* Get plz 
* 
* @return integer 
*/ 
public function getPlz() 
{ 
    return $this->plz; 
} 

/** 
* Set stadt 
* 
* @param string $stadt 
* 
* @return Mitglied 
*/ 
public function setStadt($stadt) 
{ 
    $this->stadt = $stadt; 

    return $this; 
} 

/** 
* Get stadt 
* 
* @return string 
*/ 
public function getStadt() 
{ 
    return $this->stadt; 
} 

/** 
* Set strasse 
* 
* @param string $strasse 
* 
* @return Mitglied 
*/ 
public function setStrasse($strasse) 
{ 
    $this->strasse = $strasse; 

    return $this; 
} 

/** 
* Get strasse 
* 
* @return string 
*/ 
public function getStrasse() 
{ 
    return $this->strasse; 
} 

/** 
* Set hausnummer 
* 
* @param string $hausnummer 
* 
* @return Mitglied 
*/ 
public function setHausnummer($hausnummer) 
{ 
    $this->hausnummer = $hausnummer; 

    return $this; 
} 

/** 
* Get hausnummer 
* 
* @return string 
*/ 
public function getHausnummer() 
{ 
    return $this->hausnummer; 
} 

/** 
* Set mitgliedErsteller 
* 
* @param \OrchesterRestBundle\Entity\Mitglied $mitgliedErsteller 
* 
* @return Mitglied 
*/ 
public function setMitgliedErsteller(\OrchesterRestBundle\Entity\Mitglied $mitgliedErsteller = null) 
{ 
    $this->MitgliedErsteller = $mitgliedErsteller; 

    return $this; 
} 

/** 
* Get mitgliedErsteller 
* 
* @return \OrchesterRestBundle\Entity\Mitglied 
*/ 
public function getMitgliedErsteller() 
{ 
    return $this->MitgliedErsteller; 
} 

/** 
* Add mitgliedGruppen 
* 
* @param \OrchesterRestBundle\Entity\MitgliedGruppe $mitgliedGruppen 
* 
* @return Mitglied 
*/ 
public function addMitgliedGruppen(\OrchesterRestBundle\Entity\MitgliedGruppe $mitgliedGruppen) 
{ 
    $this->mitglied_gruppen[] = $mitgliedGruppen; 

    return $this; 
} 

/** 
* Remove mitgliedGruppen 
* 
* @param \OrchesterRestBundle\Entity\MitgliedGruppe $mitgliedGruppen 
*/ 
public function removeMitgliedGruppen(\OrchesterRestBundle\Entity\MitgliedGruppe $mitgliedGruppen) 
{ 
    $this->mitglied_gruppen->removeElement($mitgliedGruppen); 
} 

/** 
* Get mitgliedGruppen 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getMitgliedGruppen() 
{ 
    return $this->mitglied_gruppen; 
} 

}

+0

私は別の解決策を得ます。私は同時にJSONと複数のパートのリクエストを送信する方法を知らない。そこで私はユーザーのセービングを分けました。 初めて:JSONでユーザーのデータを保存するだけです。 2回目:ファイルをマルチパートとしてアップロードします。 うまく動作します! –

+0

こんにちは@Herval NGANYAあなたはクライアント側でマルチパートデータを送信する方法を知らないのですか? – Matteo

答えて

0

あなたがあちこちにファイルにアクセスすることができますリクエストをMと次のようにあなたのシナリオのデータを合わせる:

/** 
* @Rest\Post("") 
*/ 
public function mitgliedAnlegenRestAction(Request $request) 
{ 

    $parameters = $request->request->all(); 
    $parametersAsArray = json_decode($content, true); 

    $filesAsArray = $request->files->all(); 

    // You could access to a file uploaded in the file attribute as example 
    // @var UploadedFile file */ 
    $file = $filesAsArray['file']; 

... 

・ホープ、このヘルプ

関連する問題