Я знаю, что это старый, но я думаю, что я нахожу проблему. Я столкнулся с той же проблемой, но это происходит только тогда, когда я был экземпляром Illuminate \ Http \ UploadedFile.
Чтобы решить эту проблему, мне фактически пришлось сохранить файл на локальный диск (не S3 или любой другой удаленный диск), а затем манипулировать сохраненным PDF. Работал префектно!
Вот пример моего кода (примечание: я зацикливаюсь вручную из-за бизнес-правил в приложении.
* generates a PNG preview from a PDF file
* @param UploadedFile $file PDF file to be converted
* @param $historyID integer asset_file_history_id
* @return bool whether or not the preview was successfully created
*/
function generatePreviewImage(UploadedFile $file,$historyID)
{
$file = storage_path('app/'.$file->store('temp'));
try {
$pdf = new Pdf($file);
$pdf->setCompressionQuality(85);
$pdf->setOutputFormat('png');
$pdf->setColorspace(1);
$pageLimit = $pdf->getNumberOfPages() > 10 ? 10: $pdf->getNumberOfPages();
if($pdf->getNumberOfPages() >1) {
//using if to account for possible count of 0, rather than just relying on the loop
for ($i = 1; $i <=$pageLimit; $i++) {
$name = md5(time()) . ".png";
$tempPath = sys_get_temp_dir() . "/" . $name;
//
$pdf->setPage($i)
->saveImage($tempPath);
//
Storage::disk('s3')->put("/preview/{$name}", file_get_contents($tempPath), 'public');
$page = new PreviewImagePage();
$page->url = "preview/{$name}";
$page->asset_file_history_id = $historyID;
$page->save();
}//loop through the pages
}//if
else
{
$name = md5(time()) . ".png";
$tempPath = sys_get_temp_dir() . "/" . $name;
//
$pdf->saveImage($tempPath);
//
Storage::disk('s3')->put("/preview/{$name}", file_get_contents($tempPath), 'public');
$page = new PreviewImagePage();
$page->url = "preview/{$name}";
$page->asset_file_history_id = $historyID;
$page->save();
}//else
}
catch(\Exception $e)
{
dd($e);
// return false;
}
Затем, конечно, вернитесь и очистите все файлы, которые не нужно было сохранять.