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);
获取网址。这个网址看起来不错,但是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参数。是这样的吗?问题 - 该文件是否需要公开发布? (目前是,但我更愿意将其设为私有)。
答案 0 :(得分:1)
以下内容应该足够了:
$path = Storage::disk('s3')->url($filename);
我没有设置工作示例,但是从内存$filename
应该与您最初在->put()
方法中放置的内容相同。所以,当你在问题中说$mypath
时,希望它不会像你的s3实例那样添加前缀。
如果不是这种情况,您是否可以编辑问题以包含->url()
的结果以及put()调用和$ path的示例。
看一下编辑,我想我明白你要做什么,这已在这里解决了:
https://laracasts.com/discuss/channels/laravel/file-response-from-s3