【问题标题】:how to store upload files in public folder in laravel 8如何将上传文件存储在laravel 8的公共文件夹中
【发布时间】:2021-11-02 17:24:26
【问题描述】:

出于安全原因,我的托管服务提供商禁用了symlink() 功能,Laravel 上传文件的默认路径在 storage 文件夹中,所以我需要在我的 Cpanel 中将上传路径从 storage 目录更改为 public 目录public_html文件夹结构如下:

- files:
  -- Laravel framework files and folders such as:
     --- app
     .
     .
     .
     --- storage:
         ---- app:
              ----- public:
                    ------ uploads
- assets:
   -- CSS files and Javascript files and static images
- .htaccess 
- favicon.ico
- index.php
- robot.txt
- web.config

我想变成这样(我的意思是当文件上传时,它会被存储在 public_html => uploads 文件夹的商店中):

- files:
  -- Laravel framework files and folders such as:
     --- app
     .
     .
     .
     --- storage:
         ---- app:
              ----- public
- assets:
   -- CSS files and Javascript files and static images
- uploads:
  --- user uploaded files
- .htaccess 
- favicon.ico
- index.php
- robot.txt
- web.config

我将此代码添加到config\filesystem.php disks 数组中:

'uploads' => [
            'driver' => 'local',
            'root'   => public_path(), // previously storage_path();
        ],

在我的 VideoController 中,上传方法代码是:

public function uploadVideo (Request $request) {
        $target = $request['target'];

        //Get filename with the extension
        $fileNameWithExt = $request->file($target)->getClientOriginalName();

        //$fileNameWithExt = $request->file('cover_image')->getClientOriginalImage();
        //Get just file name
        $filename = pathinfo($fileNameWithExt, PATHINFO_FILENAME);
        //Get just ext
        $extension = $request->file($target)->getClientOriginalExtension();
        //Filename to store
        $fileNameToStore = $filename.'_'.time().'.'.$extension;
        //Upload Image
        $path = $request->file($target)->storeAs('public/uploads/' . $target, $fileNameToStore);
        
        // I add this code to create uploads folder in pucli_html
        Storage::disk('uploads')->put('filename', $filename);

        return 'storage/uploads/'. $target .'/'.$fileNameToStore;
    }

但它会在文件夹中创建一个公用文件夹

【问题讨论】:

  • $request->file($target)->move(public_path('uploads'), $fileNameToStore);

标签: php laravel laravel-8


【解决方案1】:

您无需更改任何filesystems.php。您可以在项目中的任何位置上传您的 videoimage,如下所示

$upload_path = base_path('../');

$path = $request->file($target)->move(

     $upload_path.'/uploads/', $fileNameToStore

);

【讨论】:

  • 这很好,但我需要将你编写的代码再上一层,它已重新调整 home/studioaleph/public_html/video/files/ 我需要 home/studioaleph/public_html/video/
  • @AmirHossein,我更新了我的答案。希望对你有帮助
【解决方案2】:

在config/filesystems.php中新建一个存储盘:

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

将 .env 中的 FILESYSTEM_DRIVER 值替换为新磁盘名称(上传)

您可以轻松上传文件

$file = $request->file->hashName();
$request->file->store('uploads');

【讨论】:

  • 你看到我的文件夹结构了吗?
  • 为什么要上传文件到根目录?
  • 因为我把我的公用文件夹文件放在那里,就像项目中使用的 CSS 和 javascript 文件一样
  • 我试试你的代码,我得到了Call to a member function store() on null error
  • 只是因为你无法从 public 访问 index.php
猜你喜欢
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 2019-10-13
  • 2019-01-27
相关资源
最近更新 更多