上传脚本正常运行,文件也会以正确/所需的名称保存。但是,在将数据存储在数据库中时,它会存储.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
。怎么了?
答案 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'
];