Я загружаю изображение на S3 с помощью Laravel следующим образом:
$image = $request->image;
if (!empty($image)) {
$imageFileName = $user_id.'_'.rand(11111111, 99999999) . '.' . $image->getClientOriginalExtension(); // Rename Image
try
{
//Send to S3
$s3 = Storage::disk('s3');
$filePath = '/profile/' . $imageFileName;
$s3->put($filePath, file_get_contents($image), 'public');
$image = Storage::cloud()->url($imageFileName);
}
catch(\Exception $exx)
{
//Send to Logs Etc
}
Изображение успешно загружено, но мне нужно сохранить URL в моей базе данных. Это называется здесь:
$image = Storage::cloud()->url($imageFileName);
Проблема в том, что возвращаемый URL-адрес выглядит следующим образом:
http://test -env.XXX.us-west-2.elasticbeanstalk.com / профиль / https://elasticbeanstalk -us-west-2-123XXX456XXX.s3.us-west-2.amazonaws.com / 6_52644340.jpg
Таким образом:
http://mentr -test-env.2w8sh3esch.us-west-2.elasticbeanstalk.com / profile /
несколько правильно. Но в следующем фрагменте отсутствует подпапка 'profile', и, очевидно, она снова начинается с HTTPS:
https://elasticbeanstalk -us-west-2-123XXX456XXX.s3.us-west-2.amazonaws.com / 6_52644340.jpg
Похоже, я получаю две половины ссылки в одной строке. Я не редактирую переменную $ image где-либо еще.
Правильная ссылка:
https://elasticbeanstalk -us-west-2-123XXX456XXX.s3.us-west-2.amazonaws.com / профиль / 6_52644340.jpg
Я подтвердил, что файлы загружаются правильно и общедоступно.
Я попытался позвонить:
$image = Storage::cloud()->url($filePath);
И это возвращает:
http://test -env.XXXX.us-west-2.elasticbeanstalk.com / профиль / https://elasticbeanstalk -us-west-2-XXX123XXX.s3.us-west-2.amazonaws.com / /profile/6_31595766.jpg
Обновление
Я только что заметил, что первая часть возвращаемого URL - это URL экземпляра BeanStalk с добавлением / profile /. Это даже странно, так как я не хочу использовать Beanstalk, я только хочу использовать S3.