2017-06-27 8 views
1

私はamazon s3へのファイルアップロードを実装しようとしています。私はあなたがこの方法で$s3であることの理由である方法の外S3クライアントのオブジェクトを作成しているAWS S3ファイルをcakephpでアップロード3

require_once("../vendor/aws/aws-autoloader.php"); 
use Aws\S3\S3Client; 

public function upload(){ 
    $s3 = S3Client::factory(array( 'version' => 
'latest', 'region' => 'ap-south-1', 'credentials' => array(
'key' => 'key', 
'secret' => 'secret' ))); 

    if ($this->request->is('post')) 
    { 
    if(!empty($this->request->data['file']['name'])) 
     { 
      $fileName = $this->request->data['file']['name']; 

        $s3->putObject([ 
         'Bucket'  => backetname, 
         'Key'   => $fileName, 
         'SourceFile' => $this->request->data['file']['tmp_name'], 
         'ContentType' => 'image/jpeg', 
         'ACL'   => 'public-read', 
         'StorageClass' => 'REDUCED_REDUNDANCY' 
        ]); 
     }      

     } 
} 
+0

あなたのHTTPクライアントが競合している、このプラグインを試してみてくださいhttps://github.com/mikesmullin/CakePHP-AWS-S3-Plugin –

+0

ええ、あなたが右ディリープあり、HTTPクライアントは、矛盾です。この矛盾を解決する方法。 – Ashok

+0

ありがとう、今しよう – Ashok

答えて

1

をアップロードするためのコードの下に使用して、アップロードのコントローラで

Cannot redeclare GuzzleHttp\uri_template() (previously declared in /var/www/html/appname/vendor/guzzlehttp/guzzle/src/functions‌​.php:17) File /var/www/html/appname/vendor/aws/GuzzleHttp/functions.php 

次のエラーを取得していますnull

あなたは方法自体にオブジェクトを作成する必要があるか、クラスのプロパティにS3クライアントオブジェクトを格納し、より良いコンポーネントを作成することです$this->s3->putObject()

で使用するか、以下のようなもの:

<?php 
namespace App\Controller\Component; 
use Cake\Controller\Component; 
use Aws\S3\S3Client; 

class AmazonComponent extends Component{ 
    public $config = null; 
    public $s3 = null; 

    public function initialize(array $config){ 
     parent::initialize($config); 
     $this->config = [ 
      's3' => [ 
       'key' => 'YOUR_KEY', 
       'secret' => 'YOUR_SECRET', 
       'bucket' => 'YOUR_BUCKET', 
      ] 
     ]; 
     $this->s3 = S3Client::factory([ 
      'credentials' => [ 
       'key' => $this->config['s3']['key'], 
       'secret' => $this->config['s3']['secret'] 
      ], 
     'region' => 'eu-central-1', 
     'version' => 'latest' 
     ]); 
    } 
} 

あなたのコントローラーでこのコンポーネントを使用してください。例以下:

class UploadController extends AppController{ 
    public $components = ['Amazon']; 

    public function upload(){ 
     $objects = $this->Amazon->s3->putObject([ 
         'Bucket'  => backetname, 
         'Key'   => $fileName, 
         'SourceFile' => $this->request->data['file']['tmp_name'], 
         'ContentType' => 'image/jpeg', 
         'ACL'   => 'public-read', 
         'StorageClass' => 'REDUCED_REDUNDANCY' 
        ]); 
    } 
} 
+0

ありがとうDilleep、今私はこのようないくつかのエラーが発生しました 'GuzzleHttp \ uri_template()を再宣言できません(以前は/var/www/html/appname/vendor/guzzlehttp/guzzle/src/functions.php:17で宣言されています) ) ファイル/ var/www/html/appname/vendor/aws/GuzzleHttp/functions.php'、このエラーを解決するには – Ashok

+0

あなたのコードのように見えますが、あなたはプラグインを使用していませんか? –

+0

はい私は使用していません.. httpの競合を解決する方法はありますか?私はちょうどawsに従っていますdoc – Ashok

関連する問題