Несколько дней назад я начал использовать laravel с voyager и развернул его на сервере heroku. Так как heroku использует эфемерную файловую систему, я был вынужден использовать сервисы amazon s3. Проблема заключается в том, что всякий раз, когда я загружаю изображение в медиа-менеджер в своем приложении Voyager, оно выдает сообщение об ошибке «Источник изображения не читается», но в то же время прекрасно отображает изображения. Я могу воспроизвести эту ошибку, только когда я загружаю изображение / файл или обрезаю изображение. Я подумал, что это может быть проблема политики Amazon, но я добавил политику, чтобы она все еще не работала.
Блокировать публичный доступ (настройки корзины)
Block all public access
Off
Block public access to buckets and objects granted through new access control lists (ACLs)
Off
Block public access to buckets and objects granted through any access control lists (ACLs)
Off
Block public access to buckets and objects granted through new public bucket policies
Off
Block public and cross-account access to buckets and objects through any public bucket policies
Off
Редактор политики Bucket
{
"Version": "2012-10-17",
"Id": "Policy1************",
"Statement": [
{
"Sid": "Stmt1************",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my_bucket_name/*"
}
]
}
Ошибка загрузки изображения Изображение:
Ошибка обрезки изображения Изображение:
РЕДАКТИРОВАТЬ 1
Итак, я его отладилв каталоге поставщика и обнаруживает ошибку Intervention \ Image \ Exception \ NotReadableException в vendor \ tcg \ voyager \ src \ Http \ Controllers \ VoyagerMediaController.php
vendor \ tcg \ voyager \ src \ Http \Контроллеры \ VoyagerMediaController.php file
public function crop(Request $request)
{
// Check permission
$this->authorize('browse_media');
$createMode = $request->get('createMode') === 'true';
$x = $request->get('x');
$y = $request->get('y');
$height = $request->get('height');
$width = $request->get('width');
$realPath = Storage::disk($this->filesystem)->getDriver()->getAdapter()->getPathPrefix();
$originImagePath = $realPath.$request->upload_path.'/'.$request->originImageName;
$e = [];
try {
if ($createMode) {
// create a new image with the cpopped data
$fileNameParts = explode('.', $request->originImageName);
array_splice($fileNameParts, count($fileNameParts) - 1, 0, 'cropped_'.time());
$newImageName = implode('.', $fileNameParts);
$destImagePath = $realPath.$request->upload_path.'/'.$newImageName;
} else {
// override the original image
$destImagePath = $originImagePath;
}
Image::make($originImagePath)->crop($width, $height, $x, $y)->save($destImagePath);
$success = true;
$message = __('voyager::media.success_crop_image');
} catch (Exception $e) {
$success = false;
$message = $e->getMessage();
$errors['originImagePath'] = $originImagePath;
$errors['destImagePath'] = $destImagePath;
$errors['exception'] = get_class($e);
$errors['file'] = $e->getFile();
$errors['code'] = $e->getCode();
$errors['line'] = $e->getLine();
$errors['trace'] = $e->getTrace();
}
return response()->json(compact('success', 'message', 'errors'));
}
Post Response http://localhost/voyager/public/admin/media/crop
{
"success": false,
"message": "Image source not readable",
"errors": {
"originImagePath": "//Capture1.PNG",
"destImagePath": "//Capture1.cropped_1570987211.PNG",
"exception": "Intervention\\Image\\Exception\\NotReadableException",
"file": "D:\\wamp64\\www\\voyager\\vendor\\intervention\\image\\src\\Intervention\\Image\\AbstractDecoder.php",
"code": 0,
"line": 346
}
}
Как мне решить эту проблему?