Laravel在数据库中存储tmp文件名

时间:2017-10-05 07:45:26

标签: php laravel

上传脚本正常运行,文件也会以正确/所需的名称保存。但是,在将数据存储在数据库中时,它会存储.tmp文件名

控制器代码:

public function store(Request $request)
{
    $this->validate(request(), [
        'title' => 'required',
        'body' => 'required',
        'featured_image' =>'image|max:1999'
    ]);

    $post = new Post;

    if ($request->hasFile('featured_image')) {
        $image = $request->file('featured_image');
        // dd($image);

        $filename = time(). '.' .$image->getClientOriginalExtension();
        // dd($filename);
        $location = public_path('images/' . $filename);
        // dd($location);
        Image::make($image)->resize(800, 400)->save($location);
        // dd($image);

        $post->image = $filename;

        // dd($post);
    }

    auth()->user()->publish(
        new Post(request(['title', 'body', 'featured_image']))
    );

    session()->flash('message', 'your post has now been published');
    return redirect('/');
}

它将文件名存储为C:\xampp\tmp\phpD837.tmp。怎么了?

2 个答案:

答案 0 :(得分:1)

使用正确的图片文件名创建新的Post

$post = new Post;
....
$post->image = $filename;

但是当您保存到数据库时,根本不使用$post数据:

auth()->user()->publish(
    new Post(request(['title', 'body', 'featured_image']))
);

所以基本上你用POSTed数据创建另一个新的Post,其中包含临时PHP文件名,忽略了第一个Post,它有你想要的文件名。

尝试类似:

$post = new Post;
....
$post->image = $filename;
$post->title = $request->title;
$post->body  = $request->body;

auth()->user()->publish($post);

答案 1 :(得分:0)

我通过删除$ fillable变量中的“图像”列解决了此问题。在模型Post.php中

protected $table = "posts";

protected $fillable = [
    'title',
    'image', //delete if exists
    'content'
];