簡體   English   中英

使用 php 將文件上傳到 AWS S3

[英]Upload file to AWS S3 using php

我正在嘗試創建一個 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 密鑰,所以它不起作用。 但是教程中也沒有指定任何內容。 所以我有點迷失了。

其次,我嘗試使用此代碼

它也不起作用。

第三,我嘗試了這篇文章

當我將它與 html 一起使用時它正在工作,但我真的無法創建一個僅 php 的腳本,我可以在其中指定文件位置,並將文件上傳到服務器。

任何幫助都受到高度贊賞。 我搜索了很多,但找不到任何有用的東西。

只是猜測,但您是否使用隱藏輸入在 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'];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM