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
您是否在生产服务器中检查过这样的目录结构? –
@SagarGautam谢谢你的提问 - 是的,我没有检查过,文件上传的结构完全相同。奇怪的是,当我在浏览器中输入文件路径时,它仍然会显示“文件未找到”。在开发中,我可以通过直接在浏览器中输入路径来获取文件。 –
虽然项目在服务器中更新,但有时不会考虑空目录,也不会上载。在这种情况下,您必须在生产中创建文件夹。如果存在'uploads/...',请在您的服务器上检查它。 –