Laravel在公共文件夹中而不是在存储文件夹中上传图像

时间:2020-06-26 10:35:24

标签: laravel

我希望上载的文件像public/uploads一样直接位于public/uploads/my_file.jpeg文件夹中。为什么我的代码将其上传到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);

}

3 个答案:

答案 0 :(得分:4)

发生这种情况是因为您指定了要存储为文件名的目录。 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);
}

答案 1 :(得分:0)

//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

答案 2 :(得分:0)

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

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