来自Laravel文档https://laravel.com/docs/5.5/responses#file-responses的这个片段似乎正是我需要的:
return response()->file($pathToFile);
问题是我的文件存储在S3磁盘上,我似乎无法正确引用它。
我尝试使用Storage::disk('s3')->getDriver()->getAdapter()->applyPathPrefix($myPath);
来获取完全限定的文件名。它只是返回了$myPath
的值。
然后我尝试使用Storage::disk('s3')->url($myPath);
获取网址URL看起来不错,但Symphony说它不存在。但是当我用Storage::disk('s3')->exists($myPath);
检查时,它会返回true
。
如何直接在用户的浏览器中显示云存储中的文件?
编辑:
更多细节如下:
$map->storeAs('/my/path/maps/filename.pdf', ['disk' => 's3']);
url()
的输出是“https://s3.ap-southeast-2.amazonaws.com/my.domain.com/my/path/maps/filename.pdf”response()->file()
方法不接受URL参数。是这样的吗?问题 - 文件是否需要公开? (目前是,但我更愿意将其设为私有)。
以下应该足够了:
$path = Storage::disk('s3')->url($filename);
我没有设置工作示例,但是从内存中$filename
应该与你最初在->put()
方法中放置的相同。所以当你在你的问题中说$mypath
时,希望这不是像你的s3实例那样的前缀。
如果不是这种情况,您可以编辑问题以包含->url()
的结果以及put()调用和$ path的示例。
看一下编辑,我想我明白你要做什么,这已在这里解决:
https://laracasts.com/discuss/channels/laravel/file-response-from-s3