【发布时间】:2016-06-24 07:23:50
【问题描述】:
我想做的是保护我的私人文件,以便只有其所有者才能访问它们。我将我的公共磁盘更改为存储文件夹:
'orders' => [
'driver' => 'local',
'root' => storage_path('files/orders'),
],
并创建了一个路由控制器,以便能够将文件设为私有(我故意从示例中排除了这个逻辑):
Route::get('files/{slug}', [
'as' => 'get.file',
'uses' => 'FileController@getFile',
]);
class FileController extends Controller
{
public function getFile($slug)
{
// I use spatie/laravel-medialibrary
// to manage file uploads.
$media = Media::where('slug', $slug)->first();
return response()->file($media->getPath());
}
}
getPath() 是一个 spatie/laravel-medialibrary 方法,它返回文件的正确路径:/home/vagrant/code/project/storage/files/orders/2/b414a7416571145ea9dcf9bda9a845a2.jpg。它清楚地找到了文件,因为我可以使用\Symfony\Component\HttpFoundation\File\File() 来获取文件的数据,比如它们的 mime 类型或大小(也不会得到 404 错误作为响应);当我遵循 http://localhost:3000/files/2RmYR3 路线时,我得到了这个空白的 200 响应——看起来像这样:
一个人在他的最后测试了几乎相同的代码,并且它有效,但他在 Valet 上,所以这可能是一个 Homestead 问题。他还建议这可能是标头的问题,我尝试发送不同的标头(例如内容类型/长度),但没有任何帮助,所以请查看我收到的内容,而无需为响应指定任何标头:
我也试过vagrant destroy,以防万一,但问题仍然存在。无论如何,感谢您的宝贵时间。
【问题讨论】:
-
你试过
response()->download()吗? -
@user2094178 我做了,它下载了一个文件,它的大小是正确的,但是它坏了,无法查看或打开。
标签: php laravel laravel-5.2 homestead