Отображение изображения, полученного с Google Диска

#php #html #laravel

#php #HTML #laravel

Вопрос:

я успешно настроил свое подключение к Google диску и сохранил на нем изображение. теперь я хочу получить его в моем представлении блейда. к сожалению, я не могу поместить ответ в src <img> тег, потому что он возвращает само изображение, а не путь к нему.

я попытался использовать пакет изображений вмешательства, но когда я использовал этот make() метод, я проверил его, и у него все еще не path было атрибута, поэтому я предполагаю, что его нет, чтобы сделать это легко. могу ли я отобразить изображение без наличия path ? или как мне создать временный путь для возвращаемого изображения, если это возможно, в одной строке?

у меня есть данные изображения в этой коллекции

 $storage = collect(Storage::cloud()->listContents($this->getGoogleFolderId(), false));
  

мои попытки собрать как можно больше информации:

 dd($storage->where('name', $breakdowns->first()->image->path025)->first());
  

ВОЗВРАТ:

 array:10 [▼
  "name" => "2020-10-18-16-46-25-lq.jpg"
  "type" => "file"
  "path" => "1aCS7hRWQWjVwLdF_nn5NKTKJZUbRyq2M/1qTUzjvN6qQBHpGKvN1Xic4SYsVsEgskR"
  "filename" => "2020-10-18-16-46-25-lq"
  "extension" => "jpg"
  "timestamp" => 1603032376
  "mimetype" => "image/jpeg"
  "size" => 59213
  "dirname" => "1aCS7hRWQWjVwLdF_nn5NKTKJZUbRyq2M"
  "basename" => "1qTUzjvN6qQBHpGKvN1Xic4SYsVsEgskR"
]
  

и это:

 dd(IImage::make(Storage::disk('google')->get($storage->where('name', $breakdowns->first()->image->path025)->first()['path'])));
  

ВОЗВРАТ:

 InterventionImageImage {#1562 ▼
  #driver: InterventionImageGdDriver {#1555 ▼
     decoder: InterventionImageGdDecoder {#1567 ▼
      -data: null
    }
     encoder: InterventionImageGdEncoder {#1561 ▼
       result: null
       image: null
       format: null
       quality: null
    }
  }
  #core: gd resource @747 ▼
    size: "1079x1758"
    trueColor: true
  }
  #backups: []
   encoded: ""
   mime: "image/jpeg"
   dirname: null
   basename: null
   extension: null
   filename: null
}
  

Комментарии:

1. Вы хотите использовать изображение прямо из Google Cloud или хотите загрузить его на свой сервер, а затем отобразить?

2. отображайте его только, если это возможно.

Ответ №1:

Вот как я бы подошел к вашей проблеме. Изображение уже должно быть того формата, который вам нужен.

Контроллер

 public function getImage($path)
{
    $filePath = $storage->where('name', $path)->first();

    if(isset($filePath->id)) {
        $disk = Storage::disk('google');
        $image = $disk->get($filePath->{THE ATTRIBUTE ON THAT MODEL WHICH HAS THE GOOGLE PATH});

        return response($image)->header('Content-Type', 'image/png');
    }
}
  

Маршрут

 Route::get('/dynamic-image/{path}', 'ImageController@getImage');
  

Блейд

 <img src="/dynamic-image/{{$bd->image->path025}}">
  

Комментарии:

1. я попытался встроить его в blade, как это, пока не работает <img src="{{ response(Storage::disk('google')->get($storage->where('name', $bd->image->path025)->first()['path']))->header('Content-Type', 'image/png') }}" alt="obrazok" height="50">

2. Вы не можете этого сделать, вам нужен запрос, чтобы перейти и забрать это изображение, я отредактирую свой ответ

3. вы должны иметь возможность редактировать $storage часть, чтобы она работала так, как вы ее используете, мой — всего лишь пример, и, конечно, переменная нигде не установлена

4. я попробую это первым делом утром, чтобы я мог проверить ваш ответ как правильный. Спасибо.