Попытка получить URL изображения S3 внутри папки с ведром - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь получить правильную ссылку для использования из запроса API. Я сохранил изображение в ведре S3. Вот шаги:

  1. Пользователь заполняет форму и загружает изображение.
  2. Изображение загружено в корзину S3 в папке (скажем: images/mynewimage.png)
  3. Пользователь открывает новую страницу, которая содержит изображение

Проблема в том, что URL-адрес изображения, который я получаю из Laravel, отличается от самого контейнера S3.

Из корзины S3 URL выглядит следующим образом:

https://prismahrbucket.s3-ap-southeast-1.amazonaws.com/reimburses/Screen+Shot+2020-03-17+at+14.21.38.png

Но из Laravel данный URL неверен. Вот так:

https://prismahrbucket.s3-ap-southeast-1.amazonaws.com/Screen+Shot+2020-03-17+at+14.21.38.png

Пожалуйста, посмотрите на мои сценарии:

ReimburseController.php

/**
 * Store a newly created resource in storage.
 *
 * @param  \App\Http\Requests\RequestReimburse  $request
 * @return \Illuminate\Http\Response
 */
public function store(RequestReimburse $request)
{
    $validated = collect($request->validated())
        ->except(['images'])
        ->toArray();

    if ($request->images) {
        $images = json_decode($request->images);
        $paths = [];

        foreach ($images as $image) {
            array_push($paths, $this->handleUploads($image, $validated));
        }

        $validated = array_add($validated, 'images', json_encode($paths));
    }

    $reimburse = Reimburse::create($validated);

    return response()->json([
        'created' => true,
        'data' => $reimburse,
    ], 201);
}


protected function handleUploads($image, $validated)
{
    $imageName = time() . str_random(10) . '.png';

    Storage::disk('s3')
        ->put("reimburses/{$imageName}", base64_decode($image), 'public');

    $path = Storage::disk('s3')->url($imageName);

    return $path;
}

filesystem.php

's3' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
    'url' => env('AWS_URL'),
    'visibility' => 'public' // Make s3 files public
],

Как мне это решить?

1 Ответ

1 голос
/ 21 марта 2020

Я только что нашел решение. Вместо использования только $imageName, я указал имя папки в начале.

Я имею в виду, я изменил это: $path = Storage::disk('s3')->url($imageName);

На это: $path = Storage::disk('s3')->url("images/$imageName");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...