Я использую PHP CURL для создания настроенного изображения PNG из REST API. Как только это изображение загрузилось, я хотел бы загрузить его в ведро AWS S3 и показать ссылку на него.Получить изображение через PHP curl, а затем загрузить в S3
Вот мой сценарий до сих пор:
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, 'http://url-to-generate-image.com?options=' + $_GET['options']);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
$info=curl_getinfo($ch);
curl_close($ch);
//require S3 Class
if (!class_exists('S3')) {
require_once('S3.php');
}
//AWS access info
if (!defined('awsAccessKey')) {
define('awsAccessKey', 'MY_ACCESS_KEY');
}
if (!defined('awsSecretKey')) {
define('awsSecretKey', 'MY_SECRET_KEY');
}
//instantiate the class
$s3 = new S3(awsAccessKey, awsSecretKey);
$s3->putBucket('bucket-name', S3::ACL_PUBLIC_READ);
$file_name = md5(rand(99,99999999)) + '-myImage.png';
if ($s3->putObjectFile($data, 'bucket-name' , $file_name, S3::ACL_PUBLIC_READ)) {
echo 'success';
$gif_url = 'http://bucket-name.s3.amazonaws.com/'.$file_name;
} else {
echo 'failed';
}
Он держит неудачу. Теперь, я думаю, проблема в том, где я использую putObjectFile
- переменная $data
представляет изображение, но, возможно, ее нужно передать другим способом?
Я использую общий PHP класс для S3: http://undesigned.org.za/2007/10/22/amazon-s3-php-class
Беглый взгляд на класс заставляет меня думать, что библиотека ожидает первый из параметров будет путь к файлу, а не файл данных. Если он не является файлом или недоступен, он запускает 'trigger_error ('S3 :: inputFile(): не удается открыть входной файл:'. $ File, E_USER_WARNING);' и возвращает false. –
@JonStirling - Спасибо, ты прав. Я искал поисковые запросы и даже не могу понять, есть ли способ загрузить данные файла на S3 .. – Frank
@Mortimer проверить мой ответ. – jpaljasma