2017-01-12 1 views
0

У меня это до сих пор. Но я просто не могу заставить его работать.Попытка скручивания изображения в S3

$ch = curl_init('https://urlofIMAGEIwanttoretrieve.php'); 
$fp = fopen('php://temp', 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
fwrite($fp, $data); 

$s3 = Storage::disk('s3'); 
$filename = sha1(date('Y-m-d H:i:s')).".jpg"; 
$s3->put('products/large/'.$filename, $fp, 'public'); 

Это загружает файл в порядке, но его 0 байт.

и если я

$file = Image::make($fp)->encode('jpg'); 
$s3->put('products/large/'.$filename, $file, 'public'); 

Я получаю

Unable to init from given binary data. 

Как я могу просто свернуться изображение из PHP URL, прямо в S3

ответ

0

Использование PHP памяти обертка для хранения содержание изображения, и использовать $s3->putObjectFile() метод:

Способ 1:

$ch = curl_init('https://urlofIMAGEIwanttoretrieve.php'); 
    $fp = fopen('php://temp', 'wb'); 
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    $data = curl_exec($ch); 
    fwrite($fp, $data); 

    $s3 = Storage::disk('s3'); 
    $filename = sha1(date('Y-m-d H:i:s')).".jpg"; 
    $s3->put('products/large/'.$filename, file_get_contents($fp), 'public'); 

Метод 2:

$ch = curl_init('https://urlofIMAGEIwanttoretrieve.php'); 
$fp = fopen('php://temp', 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
fwrite($fp, $data); 

$s3 = Storage::disk('s3'); 
$filename = sha1(date('Y-m-d H:i:s')).".jpg"; 
$s3->put('products/large/'.$filename, $fp->__toString(), 'public'); 

Метод 3:

$ch = curl_init('https://urlofIMAGEIwanttoretrieve.php'); 
    $fp = fopen('php://temp', 'wb'); 
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    $data = curl_exec($ch); 
    fwrite($fp, $data); 

    $s3 = Storage::disk('s3'); 
    $filename = sha1(date('Y-m-d H:i:s')).".jpg"; 
    $fp = $fp->stream(); 
    $s3->put('products/large/'.$filename, $fp->__toString(), 'public'); 
+0

Я нашел точный ответ уже. Не совсем уверен, как использовать это с классом хранения Laravel. putObject не метод на нем – KyleK

+0

@KyleK, дайте мне прочитать документацию, затем .. можете ли вы добавить тип контента в свой текущий код? – FreedomPride

+0

Похоже, что метод putFile Storage :: putFile ('photos', new File ('/ path/to/photo')); который позволяет «потоковым» файлам? Не уверен, что это то, что мне нужно. – KyleK

 Смежные вопросы

  • Нет связанных вопросов^_^