Путь к файлу, хранящемуся в s3, не совпадает с предоставленным - Использование Laravel - PullRequest
0 голосов
/ 10 апреля 2020

Я создаю сервис для загрузки изображений с laravel и хранится в корзине aws s3, это функция, отвечающая за изображение магазина.

public function fromUrl(Request $request)
{
  $validator = Validator::make($request->all(), [
    'files'   => 'required|array|min:1',
    'files.*' => 'string',
  ]);

  if (!$validator->fails()) {
    $paths = [];
    foreach ($validator->validate()['files'] as $file) {
      $url = config('services.s3.host') . Storage::disk('s3')->put('images/public', file_get_contents($file), 'public');
      array_push($paths, $url);
    }
    return $paths;
  } else {
    throw new ValidateException([
      'message' => $validator->errors()->toArray(),
      'rules' => $validator->failed()
    ]);
  }
}

Тело запроса выглядит следующим образом .

{
  "files": [
    "https://image-url-1",
    "https://image-url-2"
  ]
}

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

[
  "https://my-bucket-url/images/public/random-name-for-image1",
  "https://my-bucket-url/images/public/random-name-for-image2"
]

, но вместо этого я получаю следующее.

[
  "https://my-bucket-url/1",
  "https://my-bucket-url/1"
]

1 Ответ

0 голосов
/ 10 апреля 2020

Вы неправильно используете put в вашем примере.

Во-первых, первым параметром является путь плюс имя файла, и у вас нет имени файла random logi c. Третий параметр - массив опций.

$randomFileName = uniqid(rand(), true);

$path = 'images/public/' . $randomFileName;

Storage::disk('s3')->put($path, file_get_contents($file));

Этот код сохранит элемент в images/public/$randomFileName. Чтобы вернуть правильный путь, вы можете использовать метод url().

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

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