我希望上载的文件像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);
}
答案 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));
。