使用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());
}
问题在于,该返回的图片网址包含&和“
我尝试了htmlspecialchars_decode
我如何使URL响应干净?
答案 0 :(得分:2)
您可以从控制器轻松访问S3私有内容。您可以在此处找到解决方案:
答案 1 :(得分:-2)
您认为
{{ 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->