首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cakephp3上传亚马逊网络服务S3文件

使用cakephp3上传亚马逊网络服务S3文件
EN

Stack Overflow用户
提问于 2017-06-27 17:13:40
回答 1查看 2.6K关注 0票数 1

我正在尝试实现文件上传到亚马逊s3。我收到以下错误

代码语言:javascript
复制
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 

在upload控制器中,使用以下代码进行上传

代码语言:javascript
复制
 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'
                    ]);
         }                       

      }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-28 13:58:39

您正在方法外部创建S3客户端的对象,这就是方法中的$s3null的原因。

您可以在方法本身中创建对象,也可以将S3客户端对象存储在类属性中并与$this->s3->putObject()一起使用

最好是创建一个组件,如下所示:

代码语言:javascript
复制
<?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'
        ]);
    }
}

并在您的控制器中使用此组件。示例如下:

代码语言:javascript
复制
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'
                    ]);
    }
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44776405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档