Heroku Laravel Voyager Amazon s3 "Источник изображения не читается" при ошибке загрузки - PullRequest
1 голос
/ 11 октября 2019

Несколько дней назад я начал использовать 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/*"
        }
    ]
}

Ошибка загрузки изображения Изображение:

Image Upload Error Image

Ошибка обрезки изображения Изображение:

Image Crop Error Image

РЕДАКТИРОВАТЬ 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
  }
}

Как мне решить эту проблему?

...