Image Upload / Laravel将图像存储为.tmp而非.img文件

时间:2014-04-04 07:44:25

标签: php mysql laravel frameworks

我创建了一个应该上传图片的论坛。

以我的形式

{{ 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文件?

3 个答案:

答案 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存储它。