Laravel,上传图片错误

时间:2015-04-23 14:16:33

标签: image laravel

我知道,关于这个主题已经有很多案例,但是我看了一遍,找不到想要的。我也注意到很多用户都没有得到他们的答案。 我正在使用Laravel5,我正在尝试上传图片。简单上传,只需保存public / img文件夹中的任何图片。 我查了一些教程并想出了这段代码: 查看表格:

<form action="{{URL::to('adminPanel/addImg/done/'.$projectId)}}" method="get" enctype="multipart/form-data">
        <input name="image" type="file" />
        <br><br>
        <input type="submit" value="Ielādēt"/>
</form>

控制器代码:

public function addImageDone($id) {
         $file            = Input::file('image');
         $destinationPath = public_path().'/img/';
         $filename        = $id;
         $file->move($destinationPath);   
    }

我一直收到这个错误:

  

在非对象上调用成员函数move()

我确信,所选文件是图像。

我将不胜感激任何帮助

完成它,主要问题是POST部分!另外文件格式,但这里是正确的代码,添加图像: 形式:

<form method="POST" action="{!! URL::to('adminPanel/addImg/done/'.$projectId) !!}" accept-charset="UTF-8" enctype="multipart/form-data">
        <input type="hidden" name="_token" value="{{ csrf_token() }}"> //this part is to make POST method work
        <input name="image" type="file" />
        <br><br>
        <input type="submit" value="Ielādēt"/>
    </form> 

控制器:

public function addImageDone($id) {
         $file = Input::file('image');
         $destinationPath = public_path().'/img/';
         $file->move($destinationPath, $id.'.png');            
    }

2 个答案:

答案 0 :(得分:1)

我不知道您使用的是Laravel 4.2还是5.0。但..

我建议你使用illuminate / html - Form类。尝试使用POST代替GET上传文件(https://stackoverflow.com/a/15210810/781251http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1http://php.net/manual/en/features.file-upload.post-method.phphttp://php.net/manual/en/features.file-upload.php

如果是Laravel 4.2:

查看:

{{ Form::open(['url'=>'adminPanel/addImg/done' . $projectId , 'files' => true , 'method' => 'POST']) }}

    <label for="file">File</label>   
    {{ Form::file('file') }}

{{ Form::close() }}

控制器:

public function postImage()
{
    if( ( $file = Input::file('file') ) != null && $file->isValid() )
    {
        $file->move('destination','my_file_new_name.extension');

        return Redirect::back();
    }

    throw new \Exception('Error while upload file');
}

Laravel 5.0

查看:

{!! Form::open(['url'=>'adminPanel/addImg/done' . $projectId , 'files' => true , 'method' => 'POST']) !!}

    <label for="file">File</label>   
    {!! Form::file('file') !!}

{!! Form::close() !!}

控制器:

public function upload(Request $request)
{
    if( ( $file = $request->file('file') ) != null && $file->isValid() )
    {
        $file->move('destination','my_file_new_name.extension');

        return redirect()->back();
    }

    throw new \Exception('Error while upload file');
}

使用新名称创建文件并保留扩展名:

$ext = $file->getClientOriginalExtension();
$newName = str_random(20) . '.' . $ext;

$file->move( storage_path('images') , $newName );

现在,您有一个具有相同扩展名的新名称。要验证您的文件是图像还是..无论如何,请使用Validator。

答案 1 :(得分:0)

试试这个

<form method="POST" action="{!! URL::to('adminPanel/addImg/done/'.$projectId) !!}" accept-charset="UTF-8" enctype="multipart/form-data">
            <input name="image" type="file" />
            <br><br>
            <input type="submit" value="Ielādēt"/>
</form> 

获取图像

public function postImage(Request $request) {
    $image = $request->file("image");