2017-01-12 1 views
0

Я пытаюсь создать php-скрипт, который сможет загрузить текстовый файл в мой ведро ASW S3.Загрузить файл в AWS S3 с помощью php

Я пробовал метод, который есть на сайте AWS, но, к сожалению, это неправильно, я имею в виду, что это не конец.

Я установил SDS 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']; 

?> 

Очевидно, я не добавил АМС ключ, ни АМС секретный ключ, поэтому он не будет работать. Но в учебнике ничего не указано. Так что я потерял.

Во-вторых, я попытался с помощью этого code:

Это также не работает.

В-третьих, я пробовал это article.

Он работает, когда я использую его с html, но я действительно не могу создать скрипт только для php, где я могу просто указать расположение файла, и файл будет загружен на сервер.

Любая помощь очень ценится. Я много искал, но не мог найти ничего полезного.

+0

«рабочий _It, когда я использую его с HTML, но я действительно не в состоянии создать PHP только сценарий, где я могу просто указать местоположение файла, и файл будет загружен на сервер ». _ Я в замешательстве - что вам нужно здесь? Работает ли код в вопросе так, как ожидалось? – WillardSolutions

+0

Нет, последняя ссылка работает, так как название гласит: i.e Прямая загрузка в Amazon AWS S3 Использование PHP и HTML. Я хочу загрузить его только через php. Я намерен сделать запрос POST в php-файл с местоположением, и файл должен быть загружен в s3. – driftking9987

+0

Итак, вы создали HTML-форму с вводом файлов? – WillardSolutions

ответ

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> 
)); 

EDIT: Просто чтобы показать, что именно сработало в моем случае, это мой полный код. Путь я выполнил: 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']; 
+0

Я могу загрузить файл через браузер, но я хочу загрузить его непосредственно через php-скрипт. i.e вызовите ссылку и передайте местоположение файла в качестве параметра, и файл должен быть загружен на него. Представьте, что вы нажимаете кнопку на Android-телефоне и файл get'ss загружен в ведро, – driftking9987

+0

Ну, это не должно быть большой проблемой? Вам просто нужно убедиться, что пространство имен загружено правильно, в моем случае я добавил 'require __DIR__. '/vendor/autoload.php'; 'в верхней части моего файла и просто вызвал файл напрямую. Вы можете добавить параметр 'http: //url.nl/? Uploadfile =/test.txt' и добавить этот параметр (' $ _GET ['uploadfile'] ') в свой путь к файлу ...? –

+0

Отметьте мой отредактированный ответ, я отправил свой полный код в качестве примера –