使用php将文件上传到AWS S3

时间:2017-01-12 14:27:21

标签: php amazon-web-services amazon-s3

我正在尝试创建一个php脚本,它可以将文本文件上传到我的ASW S3存储桶。

我已经尝试过AWS网站上的方法,但遗憾的是,我认为它不是端到端的。

我已在我的实例上安装了AWS PHP SDK。

然后我做了示例代码中写的内容,即

<?php
    use Aws\S3\S3Client;

$bucket = 'cst';
$keyname = 'sampleUpload';
// $filepath should be absolute path to a file on disk                      
$filepath = '/var/www/html/po/si/mag/sahara.txt';

// Instantiate the client.
$s3 = S3Client::factory();

// Upload a file.
$result = $s3->putObject(array(
    'Bucket'       => $bucket,
    'Key'          => $keyname,
    'SourceFile'   => $filepath,
    'ContentType'  => 'text/plain',
    'ACL'          => 'public-read',
    'StorageClass' => 'REDUCED_REDUNDANCY',
    'Metadata'     => array(    
        'param1' => 'value 1',
        'param2' => 'value 2'
    )
));

echo $result['ObjectURL'];

?>

显然,我还没有添加aws密钥和aws密钥,所以它不会工作。但是,教程中也没有指定任何内容。所以有点失落。

其次,我尝试使用此code

它也无法正常工作。

第三,我尝试了这个article

当它与html一起使用时它正在工作但是我真的不能创建一个只有php的脚本,我可以只指定文件位置,并将文件上传到服务器。 / p>

非常感谢任何帮助。我经常搜索,但找不到任何有用的东西。

1 个答案:

答案 0 :(得分:1)

只是猜测,但您是否使用隐藏的输入在HTML代码中添加了凭据?因为我只是快速查看了这个页面:https://aws.amazon.com/articles/1434/,您似乎可以使用HTML设置凭据。我的猜测是班级会自动处理这个问题。

如果我的猜测是正确的,您需要将凭据添加到您的实例中:

// Instantiate the client.
$s3 = S3Client::factory();

// Instantiate the client.
$s3 = S3Client::factory(array(
  'version' => 'latest',
  'region'  => 'us-west-2', //add correct region
  'credentials' => array(
    'key' => <YOUR_AWS_KEY>,
    'secret'  => <YOUR_AWS_SECRET>
  )
));

这可能取决于您正在使用的sdk的版本,是否需要上述代码或此代码(请注意缺少的凭证数组):

// Instantiate the client.
$s3 = S3Client::factory(array(
  'version' => 'latest',
  'region'  => 'us-west-2', //add correct region
  'key' => <YOUR_AWS_KEY>,
  'secret'  => <YOUR_AWS_SECRET>
));

编辑: 只是为了展示我的案例究竟有用,这是我的完整代码。我执行的路径: http://myurl.com/index.php?path=./test.txt

代码:

require __DIR__ . '/vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = 'sdl-images';
$keyname = '*** Your Object Key ***';
// $filepath should be absolute path to a file on disk                      
$filepath = $_GET['path'];

// Instantiate the client.
$s3 = S3Client::factory(array(
  'version' => 'latest',
  'region'  => <YOUR_REGION E.G. eu-west-1>,
  'credentials' => array(
    'key' => <YOUR_AWS_KEY>,
    'secret'  => <YOUR_AWS_SECRET>
  )
));

// Upload a file.
$result = $s3->putObject(array(
    'Bucket'       => $bucket,
    'Key'          => $keyname,
    'SourceFile'   => $filepath,
    'ContentType'  => 'text/plain',
    'ACL'          => 'public-read',
    'StorageClass' => 'REDUCED_REDUNDANCY'
));

echo $result['ObjectURL'];