Как вернуть файлы из корзины S3 в виде изображения в Laravel?

Я начал использовать корзину S3 в своем проекте Laravel 8.x и разрешил загрузку файлов в корзину с помощью этого кода:

Storage::disk('s3')->put($file_path_on_s3_drive, $file_content_as_binary);

Теперь я пытаюсь передать это изображение в браузер следующим образом:

public function showImage(string $id) {
    $image = Image::find($id);

    return Storage::disk('s3')->get($image->file_path_on_s3_drive);
}

Но он показывает файл как строку в браузере, а не как изображение.

Как отображать данные в виде изображения в браузере?

ОБНОВЛЕНИЕ: я вызываю эту функцию showImage() из веб-маршрута:

Route::get('image/{id}', [ImageController::class, 'showImage']);

person netdjw    schedule 07.02.2021    source источник
comment
Вам нужно отправить Content-Type заголовков.   -  person ceejayoz    schedule 07.02.2021
comment
Не могли бы вы привести пример кода, пожалуйста?   -  person netdjw    schedule 07.02.2021
comment
этот вопрос должен помочь, Как отобразить изображение из aws s3 в Blade Laravel 5.2   -  person bhucho    schedule 07.02.2021
comment
@bhucho спасибо, но не совсем. Эта функция имеет маршрут и не встроена в шаблон блейда.   -  person netdjw    schedule 07.02.2021
comment
вам нужно показать, что вы получаете от своего get?, для этого также есть решение, если вы можете получить тип mime из заголовка Content-type, тогда вы также можете передать изображение как переменную   -  person bhucho    schedule 07.02.2021
comment
используйте этот ответ в качестве примера, stackoverflow.com/a/66077922/9471283 может помочь узнать, как преобразовать строку для получения изображения как строка base64   -  person bhucho    schedule 07.02.2021


Ответы (1)


Суть была:

return response()->make(
    Storage::disk('s3')->get($path_and_filename),
    200,
    ['Content-Type' => 'image/jpeg']
);
person netdjw    schedule 08.02.2021