我创建了一个应该上传图片的论坛。
以我的形式
{{ Form::file('image') }}
这是我的控制器的一部分:
public function store()
{
$input = Input::all();
$v = Validator::make($input, Post::$rules);
if ($v->passes()) {
$post = new Post;
$post->title = Input::get('title');
$post->body = Input::get('body');
$post->image = Input::file('image'); // your file upload input field in the form should be named 'file'
$destinationPath = 'uploads/'.str_random(8);
$filename = $post->image->getClientOriginalName();
$extension =$post->image->getClientOriginalExtension(); //if you need extension of the file
$uploadSuccess = Input::file('image')->move($destinationPath, $filename);
$post->m_keyw = Input::get('m_keyw');
$post->m_desc = Input::get('m_desc');
$post->slug = Str::slug(Input::get('title'));
$post->user_id = Auth::user()->id;
$post->save();
return Redirect::route('posts.index');
}
return Redirect::back()->withErrors($v);
}
但laravel将图像存储为数据库中的.tmp文件。
我的数据库中的路径是“/uploads/xxxxx.tmp”
为什么laravel将图像存储为.tmp而不是.img?
我有什么不对,为什么laravel将图像存储为.tmp文件?
答案 0 :(得分:1)
问题出在这一行
$post->image = Input::file('image');
将.temp图像文件分配给模型实例,这是存储在数据库中的内容。
你可以这样做。
$post = new Post;
$post->title = Input::get('title');
$post->body = Input::get('body');
$file = Input::file('image');
$filename = $file->getClientOriginalName();
$destinationPath = 'uploads/'.str_random(8);
// This will store only the filename. Update with full path if you like
$post->image = $filename;
$uploadSuccess = $file->move($destinationPath, $filename);
答案 1 :(得分:0)
我通过删除$ fillable变量中的“图像”列解决了此问题。在模型Post.php中
protected $table = "posts";
protected $fillable = [
'title',
'image', //delete if exists
'content'
];
答案 2 :(得分:-1)
.tmp
文件是您从本地计算机选择的文件。因此,您需要为模型分配正确的路径,以使用正确的URL存储它。