【问题标题】:Laravel upload image in the Public Folder not in Storage FolderLaravel 在公共文件夹中而不是在存储文件夹中上传图像
【发布时间】:2020-06-27 14:04:01
【问题描述】:

我希望上传的文件像public/uploads/my_file.jpeg 一样直接位于public/uploads 文件夹中。为什么我的代码会上传到public/uploads/file_name/file.jpeg

这里是filesystems.php

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

这里是控制器。

function upload_template(Request $request)
{


    $filee = $request->file('file_upload');
    $file_ext = $filee->extension();

    $file_name = $model->id . "." . $file_ext;

    Storage::disk('public_uploads')->put($file_name, $filee);

}

【问题讨论】:

    标签: laravel


    【解决方案1】:

    这是因为您将要存储的目录指定为文件名。 file_name,应该是目录名,比如images

    参考这一行:

    Storage::disk('public_uploads')->put($file_name, $filee);
    

    所以你可以把它改成:

    Storage::disk('public_uploads')->put('images', $filee);
    // output : /images/234234234.jpg
    

    您需要在第二个参数中提供文件内容而不是文件对象,试试这个:

    Storage::disk('public_uploads')->put($file_name, file_get_contents($filee));
    

    要指定文件名,您可以使用move() 方法而不是storage()

    if($request->hasFile('file_upload'))
    {
      $filee = $request->file_upload;
      $name = "my_file"; // name here
      $fileName = $name . $filee->getClientOriginalName();
      $filee->move('public_uploads',$fileName);
    }
    

    【讨论】:

    • 具体文件名怎么放?
    • 在你的$file_name变量$file_name = "My Name";
    • 我认为这个$file_name 成为文件夹。它发生在我的代码中。如何指定像my_file.jpeg 这样的文件名而不是随机的yyyte3542s.jpeg
    【解决方案2】:
    //this is the best way you create a trait with 2 functions saveImage and 
    //deleteImage
    
     public function saveImage($name,$folder){
    $extention=$name->getClientOriginalExtension();
    $filename=time().'.'.$extention;
    $path=public_path().'/'.$folder;
    $name->move($path,$filename);
    return $filename;
    

    }

    public function deleteImage($name,$folder){
    $image_path=public_path().'/'.$folder.'/'.$name;
    unlink($image_path);
    

    }

      function upload_template(Request $request){
        $file = $request->file_upload;//$request->your input name
         $img=$this->saveImage($file,'uploads');
    
         //you can use $img for storing the image in database for example 
          User::create([
            'avatar'=>$img
           ])
     }
    //don't forget to invoke your trait
    

    【讨论】:

    • 虽然此代码可以解决 OP 的问题,但最好包含关于您的代码如何解决 OP 问题的说明。通过这种方式,未来的访问者可以从您的帖子中学习,并将其应用到他们自己的代码中。 SO 不是编码服务,而是知识资源。此外,高质量、完整的答案更有可能得到支持。这些功能,以及所有帖子都是独立的要求,是 SO 作为一个平台的一些优势,使其与论坛区分开来。您可以编辑以添加其他信息和/或使用源文档补充您的解释。
    【解决方案3】:

    我刚刚找到它Laravel 5.3 Storage::put creates a directory with the file name

    需要在第二个参数而不是文件对象中提供文件内容。 Tt 应该是Storage::disk('public_uploads')->put($file_name, file_get_contents($filee));

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 2019-12-29
      • 2021-04-27
      • 1970-01-01
      • 2021-11-02
      • 2016-07-02
      • 2020-05-20
      • 2021-09-08
      • 2017-02-03
      相关资源
      最近更新 更多