Используя Laravel, как получить изображение из приватной корзины s3 через действие контроллера - PullRequest
0 голосов
/ 10 сентября 2018

Используя Laravel, я хочу получить единый URL для всех изображений. Изображения хранятся в приватной корзине s3.

Мое текущее действие контроллера:

    public function getImage(Request $request) {
        $file =  Storage::disk('s3')->temporaryUrl($request->filename, now()->addMinutes(5));
        return response()->file($file);
    }

На мой взгляд, я ссылаюсь на это как:

{{ route('image', ['filename' => $user->meta->profile_image_url]) }}

Я получаю сообщение об ошибке: Symfony \ Component \ HttpFoundation \ File \ Exception \ FileNotFoundException: ...

Проблема в том, что если я просто уронил доступ к URL-адресу непосредственно в представление, он будет работать нормально. Я сделал такие вещи, как:

{{ Storage::disk('s3')->temporaryUrl($filePathFromDB, now()->addMinutes(5)) }}

Опять пытаюсь унифицировать мой доступ к файлам.

-

Я работал над этим еще немного, и у меня появилось обновленное действие контроллера:

    public function getImage(Request $request) {
      $adapter = Storage::disk('s3')->getDriver()->getAdapter();       

      $command = $adapter->getClient()->getCommand('GetObject', [
        'Bucket' => $adapter->getBucket(),
        'Key'    => $adapter->getPathPrefix(). '' . $request->filename
      ]);

      $img = $adapter->getClient()->createPresignedRequest($command, '+20 minute');
      return response()->file($img->getUri());
}

проблема в том, что это возвращает URL изображения с & и "

Я пробовал htmlspecialchars_decode

Как мне получить чистый URL-адрес?

1 Ответ

0 голосов
/ 10 сентября 2018

По вашему мнению

{{ Html::image("$user->meta->profile_image_url", '', array('class' => 'img-responsive')) }}

в вашей пользовательской модели

public function getProfileImageUrlAttribue {
    if(Storage::disk('s3')->exists($this->meta->profile_image_url)) {
        return $this->meta->profile_image_url;
    }else {
          //....
    }
}

Я знаю, что вы хотите сделать это в контроллере, но логика все та же Storage::disk('s3')->exists->

Файловая система Laravel

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