使用 cakephp 3 上传 AWS S3 文件

阿肖克

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

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 

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

 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'
                    ]);
         }                       

      }
}
迪利普·库马尔

要创建S3客户端,它的原因是该方法以外的目的$s3在方法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'
                    ]);
    }
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用s3上传多个文件

使用Java将AWS文件上传到S3

如何使用Java Apache HttpClient将文件上传到公共AWS S3存储桶

如何使用AWS AppSync将文件上传到AWS S3

使用Skipper将Sails.js文件上传到AWS S3

使用AWS4 Auth通过bash将文件上传到s3?

使用AWS S3顺序上传多个文件时出现访问被拒绝错误

如何使用Python在myBucket中上传CSV文件并在S3 AWS中读取文件

使用NodeJS将多个文件上传到AWS S3

使用Retrofit2将文件上传到AWS S3预签名URL

如何使用kms加密将文件从AWS cli上传到s3

使用POST请求在AWS S3上基于浏览器的文件上传

如何使用aws-sdk同步将文件上传到S3?

使用Java AWS SDK将文件夹上传到S3存储桶

在Flutter中使用AWS S3上传文件返回空字符串

使用NodeJS将ffmpeg文件输出上传到AWS s3

如何使用Java将文件夹上传到AWS S3?

使用FFMPEG转换文件并上传到AWS S3 Node.js

AWS仅使用ID和密钥将文件上传到S3服务器

使用预定义的文件名上传AWS S3 CORS

Rails 3.1:使用PaperClip / Mongoid / SimpleForm <-嵌套表单在AWS S3上上传文件

使用ruby在AWS S3的同一目录中上传多个文件

使用 Ruby 将文件上传到 S3 时出现 Aws::Errors::MissingRegionError

使用 AWS SDK ASP.NET 将文件上传到 S3

如何使用 PGP 加密文件并上传到 S3 AWS

上传后从 AWS S3 获取上传的文件

如何使用 python 3.8 将文件上传到 AWS S3 子文件夹?

使用 AWS S3 v/s S3 Glacier 上传将文件上传到 Glacier

使用 react-aws-s3 将 csv 文件上传到 S3