档案上传器

时间:2018-10-30 08:16:27

标签: laravel file

我需要写入上载文件的表路径。我正在等待相同的路径uploads / fileName1540886604.jpg,但是我正在获得相同的路径/ tmp / phpQOolst。

form.blade.php

<input type="file" name="file">

PostController.php

public function store(Request $request, Post $post)
    {
$fileName = "fileName" . time() . '.' . $request->file('file')->getClientOriginalExtension();;
    $path = $request->file("file")->storeAs('uploads', $fileName, 'public');

 $post->setAttribute('file', $path);
 $post = $post->create($request->all())

Post.php

class Post extends Model
{

   protected $fillable = ['name', 'slug', 'content', 'file', 'published', 'created_by'];

public function setFileAttribute($value)
{
    //dd($value);
    $this->attributes['file'] = $value;
}

当我添加代码dd($ value)时,我得到了uploads / fileName1540886604.jpg进行测试,但有注释,它存储在/ tmp / phpQOolst中。

2 个答案:

答案 0 :(得分:1)

您正在使用请求中的所有内容覆盖$ post。

最好做些类似的事情

$path = $request->file("file")->storeAs('uploads', $fileName, 'public');
$post = new Post($request->all());
$post->file = $path;
$post->save();

或更短

$path = $request->file("file")->storeAs('uploads', $fileName, 'public');
$request->merge(['file' => $path]); //Overwrite file in the request
$post = Post::create($request->all());

但是一个缺点是您将无法再访问File对象,因此

$post = Post::create($request->except('file')->toArray() + ['file' => $path]);

也可以工作

答案 1 :(得分:0)

您可以使用mutator直接保存文件

public function setFileAttribute($file)
{
    $fileName = "fileName" . time() . '.' . $file->getClientOriginalExtension();
    $path = $file->storeAs('uploads', $fileName, 'public');
    $this->attributes['file'] = $path;
}

然后在控制器中,您只需要创建帖子:

$post = Post::create($request->all());