2017-10-09 4 views
0

En essayant de télécharger un fichier image/type de fichier de l'application mobile et de stocker cette image dans le backend. Im en utilisant l'API Yii2 framework pour ce faire. Et im en utilisant postman pour vérifier l'API. Je cours le ci-dessous dans mon action. Lorsque je l'exécute comme méthode POST de postman .. et j'imprime la valeur de $ uploads im obtenant la valeur vide. Cela signifie qu'il ne vient pas au contrôleur. S'il vous plaît aidez-moi à résoudre ce problème.yii2 REST api pour le téléchargement de fichier

Répondre

0

Pour moi, ce que je fis sans la classe UploadFile

/*Uploading documents*/ 
     public function actionUploading() { 

     $uploads = \yii\web\UploadedFile::getInstanceByName('upfile'); 

     \yii::$app->request->enableCsrfValidation = false; 
      $filename = $uploads->name; 
      $path = "http://localhost/projects/YiiRestful/api/web/uploads/".$filename; 
      $putdata = fopen("php://input", "r"); 
      // make sure that you have /web/upload directory (writeable) 
      // for this to work 
      $path = "uploads/".$filename; 

      $fp = fopen($path, "w"); 

      while ($data = fread($putdata, 1024)) 
       fwrite($fp, $data); 

      /* Close the streams */ 
      fclose($fp); 
      fclose($putdata); 
    } 
0

Je voudrais essayer quelque chose comme ça ... (non testé)

public function actionUploadingDoc() { // good practice to use camel case for methods 
    $uploads = \yii\web\UploadedFile::getInstances('upfile'); 
    if (empty($uploads)){ 
     return false; 
     // handle error reporting somewhere else 
    } 
    $path = 'uploads/'; // set your path 
    foreach ($uploads as $upload){ 
     $filename = $path . time() .'_'. $upload->name ; 
     $upload->saveAs($filename); 
    } 
    return true; 
} 
0

Vous pouvez utiliser la chaîne base64 à uplod. définir la fonction à l'intérieur contrôleur comme celui-ci

public function base64_to_jpeg($base64_string, $output_file) { 
    $path="your/real/path/"; 
    // open the output file for writing 
    $ifp = fopen($path.$output_file, 'wb'); 

    // split the string on commas 
    // $data[ 0 ] == "data:image/png;base64" 
    // $data[ 1 ] == <actual base64 string> 
    $data = explode(',', $base64_string); 
    if(count($data)>1) { 
     $dataText=$data[ 1 ]; 
    } else { 
     $dataText=$base64_string; 
    } 

    // we could add validation here with ensuring count($data) > 1 
    fwrite($ifp, base64_decode($dataText)); 

    // clean up the file resource 
    fclose($ifp); 

    return $output_file; 
} 

Et utiliser à l'intérieur action

public function actionUpload(){ 

    $imgName=md5(uniqid()).'.jpg'; 
    $this->base64_to_jpeg($base64_string, $imgName); 
}