2017-08-28 89 views
1

没有发现在Laravel 5.3我想建立一个公众开放的上传目录,所以我做了这个在filesystems.php配置文件:在FileController.phpLaravel 5.3文件在生产

'disks' => [ 

    ... 

    'uploads' => [ 
     'driver' => 'local', 
     'root' => public_path().'/uploads', 
    ], 

    ... 

store功能,我使用此创建文件:

 // Send file to "uploads" drive, under "announcements" folder. 
     $path = $file->store('announcements', 'uploads'); 

     // Create file in DB 
     $originalName = $file->getClientOriginalName(); 

     $uploadedFile = File::create([ 
      'name' => $originalName, 
      'path' => $path, 
     ]); 

而这个功能来下载文件:

public function publicDownload(Request $request) 
{ 
    $file = File::where('path', $request->p)->firstOrFail(); 

    return response()->download('uploads/'.$request->p, $file->name); 
} 

这适用于开发环境(宅基地),但不适用于生产环境(共享主机)。代码或设置有什么问题?

Laravel.log说:

[2017-08-28 10:46:41] production.ERROR: exception 'Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException' with message 'The file "uploads/announcements/ee00ed45f3354894205c2ae47bb5b30a.pdf" does not exist' in /home3/xxx/app/vendor/symfony/http-foundation/File/File.php:37 
+0

您是否在生产服务器中检查过这样的目录结构? –

+0

@SagarGautam谢谢你的提问 - 是的,我没有检查过,文件上传的结构完全相同。奇怪的是,当我在浏览器中输入文件路径时,它仍然会显示“文件未找到”。在开发中,我可以通过直接在浏览器中输入路径来获取文件。 –

+0

虽然项目在服务器中更新,但有时不会考虑空目录,也不会上载。在这种情况下,您必须在生产中创建文件夹。如果存在'uploads/...',请在您的服务器上检查它。 –

回答

1

我刚才注意到你有问题,在下面的行根,

'uploads' => [ 
    'driver' => 'local', 
    'root' => public_path().'/uploads', 
], 

您已经定义了根高达..../public/uploads/让你充分文件路径从..../public/uploads/开始,并搜索不存在的目录..../public/uploads/upload/中的文件。

所以,你的根改为只喜欢公共道路,

'root' => public_path(), 

另一件事,

在下载,不使用存储门面,所以你需要提供完整的路径一样,

return response()->download(public_path().'/uploads/'.$request->p, $file->name); 

希望你明白。