Я пытаюсь получить правильную ссылку для использования из запроса API. Я сохранил изображение в ведре S3. Вот шаги:
- Пользователь заполняет форму и загружает изображение.
- Изображение загружено в корзину S3 в папке (скажем:
images/mynewimage.png
) - Пользователь открывает новую страницу, которая содержит изображение
Проблема в том, что 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
],
Как мне это решить?