Как вернуть случайное имя файла S3 при загрузке Laravel? - PullRequest
0 голосов
/ 11 июня 2019

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

В настоящее время я могу загрузить файл и сохранить в базе данных то, что я считаю URL S3.Ничего из этого не является проблемой.Однако происходит то, что S3 генерирует это случайное имя файла.Я в порядке с этим, но я хотел бы как-то вернуть его в контроллер, чтобы я мог сохранить его с путем в БД.

Я использую:

  • Laravel 5.8.19
  • S3 Bucket
  • лига / flysystem-aws-s3-v3

Вот мой контроллер:

public function store(Request $request)
{
    //Validate Form Data
    $this->validate($request, [
      'opponent' => 'required',
      'location' => 'required',
      'date' => 'required',
      'team_id' => 'required',
      'season_id' => 'required',
      'team_score' => 'required',
      'opponent_score' => 'required',
      'uploading_coach' => 'required',
      'periods' => 'required',
      'period_length' => 'required',
    ]);

    //Store all the text fields, not the video
    $game = new Game;
    $game->opponent = $request->input('opponent');
    $game->location = $request->input('location');
    $game->date = $request->input('date');
    $game->team_id = $request->input('team_id');
    $game->season_id = $request->input('season_id');
    $game->team_score = $request->input('team_score');
    $game->opponent_score = $request->input('opponent_score');
    $game->uploading_coach = $request->input('uploading_coach');
    $game->periods = $request->input('periods');
    $game->period_length = $request->input('period_length');

    $game->save();

    //Set up some variables needed below
    $getGameID = $game->id;
    $team_id = $game->team_id;
    $game_date = $game->date;

    //Handles the actual file upload to S3
    $theFile = $request->file('video_file');
    $name = 'game_date-' . $game_date . 'game_id-' . $getGameID;
    $theFile->storePublicly(
      'gameid:' . $getGameID . 'teamid:' . $team_id . '/' . $name,
      's3'
    );

    //Game film is now uploaded to S3, trying to get the url and store it in the db
    $url = Storage::disk('s3')->url('gameid:' . $getGameID . 'teamid:' . $team_id . "/" . $name);

    $gameVid = Game::find($getGameID);
    $gameVid->video_link = $url;
    $gameVid->save();

    return back();
}

Есть идеи?

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Я посмотрел этот пост до того, как создал свой, но я неправильно понял свою проблему, думая, что его пост не связан.Оказывается, ответ на этот вопрос можно найти здесь: Загрузка изображения Laravel S3 создает папку с именем файла автоматически

0 голосов
/ 11 июня 2019

Самым простым способом загрузки и извлечения файлов из S3 является использование фасада хранилища.

Storage::disk('s3')->put('file.txt', $fileContent);

Для загрузки файла в Amazon S3. Файл хранится с указанным вами именем, поэтому у вас есть предсказуемое имя файла. Вы можете сохранить имя файла, например, в базе данных, чтобы позже его можно было извлечь.

Затем вы можете позже извлечь сохраненный файл с помощью:

Storage::disk('s3')->get('file.txt');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...