如何将Laravel中的文件直接上传到公共文件夹?

时间:2017-06-15 21:32:54

标签: php laravel laravel-5.4

我托管我网站的服务器不支持links,因此我无法运行php artisan storage:link将我的存储目录链接到公共目录。我试图在 filesystems.php 中重新制作磁盘配置以直接引用public文件夹,但它似乎也没有用。有没有办法将Laravel库直接上传到公共文件夹中,或者我必须使用php方法?提前谢谢。

8 个答案:

答案 0 :(得分:25)

您可以在config/filesystems.php中创建新的存储光盘:

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

并存储这样的文件:

if(!Storage::disk('public_uploads')->put($path, $file_content)) {
    return false;
}

答案 1 :(得分:2)

我想出了解决此问题的方法,请在config/filesystem.php中添加'default' => 'public',这行,以解决此问题。

答案 2 :(得分:1)

您可以将磁盘传递给\Illuminate\Http\UploadedFile类的方法:

$file = request()->file('uploadFile');
$file->store('toPath', ['disk' => 'public']);

或者您可以创建新的Filesystem磁盘并将其保存到该磁盘。

您可以在config/filesystems.php中创建一个新的存储磁盘:

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

在控制器中:

$file = request()->file('uploadFile');
$file->store('toPath', ['disk' => 'my_files']);

答案 3 :(得分:1)

最灵活的方法是编辑 .env 文件:

FILESYSTEM_DRIVER=public

答案 4 :(得分:0)

你应该尝试这种跳跃你添加了方法=" post" ENCTYPE ="多部分/格式数据"到你的形式。请注意,公共路径(.uploadedimages)将被移动到项目目录中的公用文件夹以及上载图像所在的位置。

public function store (Request $request) {

  imageName = time().'.'.$request->image->getClientOriginalExtension();
  $request->image->move(public_path('/uploadedimages'), $imageName);

  // then you can save $imageName to the database

}

答案 5 :(得分:0)

除了那里的每个答案,我建议添加另一个保护层,因为它是一个公共文件夹。

对于您的公用文件夹中需要保护的每个文件,请执行一条路径以验证对它们的访问权限,例如

/files/images/cat.jpg

和类似/files/images/{image_name}的路由,以便您可以针对给定文件验证用户。

正确验证后,您就可以了 return response($full_server_filepath, 200)->header('Content-Type', 'image/jpeg');

它使工作变得更难,但更安全

答案 6 :(得分:0)

在config / filesystem.php文件中,添加以下内容:

 'public_uploads' => [
        'driver' => 'local',
        'root'   => public_path(),
    ],

并在控制器中

$file = $request->file("contract");           
$ext = $file->extension();
$filename = $file->storeAs('/contracts/', $contract->title.'.' . $ext,['disk' => 'public_uploads']);

答案 7 :(得分:0)

推荐的方法是从公共目录对存储进行符号链接。

<块引用>

要使这些文件可从网络访问,您应该创建一个 从 public/storage 到 storage/app/public 的符号链接。利用 此文件夹约定将使您的可公开访问的文件合二为一 使用零时可以在部署之间轻松共享的目录 像 Envoyer 这样的停机部署系统。

要创建符号链接,您可以使用 storage:link Artisan 命令: