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

时间:2013-11-18 05:30:49

标签: php object upload laravel laravel-4

我正在尝试制作图片上传器,但它总是给我这个错误

Call to a member function getClientOriginalName() on a non-object

这是我的代码控制器代码

public function uploadImageProcess(){

    $destinatonPath = '';
    $filename = '';

    $file = Input::file('image');
    $destinationPath = public_path().'/assets/images/';
    $filename = str_random(6).'_'.$file->getClientOriginalName();
    $uploadSuccess = $file->move($destinationPath, $filename);

    if(Input::hasFile('image')){
        $images = new Images;

        $images->title = Input::get('title');
        $images->path = '/assets/images/' . $filename;
        $image->user_id = Auth::user()->id;

        Session::flash('success_insert','<strong>Upload success</strong>');
        return Redirect::to('user/dashboard');
    }
}

这是上传表格

<form role="form" action="{{URL::to('user/poster/upload_process')}}" method="post">
    <label>Judul Poster</label>
    <input class="form-control" type="text" name="title">
    <label>Poster</label>
    <input class="" type="file" name="image"><br/>
    <input class="btn btn-primary" type="submit" >
</form>

我的代码出了什么问题?

6 个答案:

答案 0 :(得分:22)

您错过了表单标记中的enctype属性。

要么这样做

<form role="form" action="{{URL::to('user/poster/upload_process')}}" method="post" enctype="multipart/form-data">
...
</form>

或者这......

{{ Form::open(array('url' => 'user/poster/upload_process', 'files' => true, 'method' => 'post')) }}
// ...
{{ Form::close() }}

答案 1 :(得分:1)

这些代码是正确的,但您没有检查Input::file('image')的退货值。我认为返回值可能不是正确的对象,或者您的类输入没有公共函数名称getClientOriginalName

代码:

$file = Input::file('image');
var_dump($file); // if return a correct object. you will check your class Input.
祝你好运。

答案 2 :(得分:0)

请检查您的表单'文件'=&gt;真正 {! Form :: open(['route'=&gt; ['Please Type Url'],'class'=&gt;'form-horizo​​ntal', 'files'=&gt; true < / strong>])!!}

答案 3 :(得分:0)

这仅仅是因为您忘记在enctype="multipart/form-data"标签中写<form>

当您忘记此错误时,就会发生此错误:

<form class="form form-horizontal" method="post" action="{{ route('articles.store') }}" enctype="multipart/form-data">

答案 4 :(得分:0)

class TheTableViewController: UITableViewController, MyCellDelegate {

    let cellData = ["cell1","cell2","cell3","cell4","cell2","cell3","cell4","cell2","cell3","cell4","cell2","cell3","cell4","cell2","cell3","cell4","cell2","cell3","cell4"]
    var selectedIndexpaths = [IndexPath]()


    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(MyCell.self, forCellReuseIdentifier: "MyCell")
    }


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return cellData.count
    }

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 55.0
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyCell
        cell.cellButtonDelegate = self
        cell.configureCell(with: cellData[indexPath.row], atIndexPath: indexPath, selected: selectedIndexpaths)
        return cell
    }

    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 30.0
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath) as! MyCell
        cell.buttonClicked(UIButton())
    }

    func cellButtonClicked(_ indexPath: IndexPath) {
        if selectedIndexpaths.contains(indexPath) {
            //this means cell has already selected state
            //now we will toggle the state here from selected to unselected by removing indexPath
            if let index = selectedIndexpaths.index(of: indexPath) {
                selectedIndexpaths.remove(at: index)
            }

        } else {
            //this is new selection so add it
            selectedIndexpaths.append(indexPath)
        }

        tableView.reloadData()
    }
}

答案 5 :(得分:0)

如果您使用Laravel Collective,则可以尝试此解决方案

{{ Form::open(array('url' => 'user/poster/upload_process', 'files' => true, 'method' => 'post')) }}

{{ Form::close() }}

否则,如果您使用的是html表单标签,则不必额外设置markdown来存储图像数据

<form class="form form-horizontal" method="post" action="{{ route('user/poster/upload_process') }}" enctype="multipart/form-data">