如何克服Laravel dropzone文件上传中的getClientOriginalName()错误?

时间:2016-12-30 10:03:37

标签: php jquery laravel dropzone.js

我正在使用Laravel 5.0进行图片上传我正在使用dropzone.js。实际上文件上传到文件夹和数据库,但它抛出错误,如

  

在非对象上调用成员函数getClientOriginalName()   关于邮政方法。

我哪里出错?

查看文件,

<form  method="POST" class="dropzone dz-clickable" id="productDropzone" action="{{url()}}/cms/website/pages/upload_files" enctype="multipart/form-data">
                              <div class="dz-default dz-message">
                                <span>Drop files here to upload</span>
                              </div>
                              <input name="_token" type="hidden" value="{{ csrf_token() }}">
                            <input type="submit" value="Upload" id="submit_all"/>
                          </form>

以下是我的js,

Dropzone.autoDiscover = false;
var myDropzone = new Dropzone("form#productDropzone", { 
    paramName : 'file',
    maxFilesize: 3, // MB
    maxFiles: 3,
    autoProcessQueue: false,
    addRemoveLinks: true,
    init: function() {
        this.on("addedfile", function(file) { fileupload_flag = 1; });
        this.on("complete", function(file) { fileupload_flag = 0; });
    },
    accept: function(file, done) 
   {
        var re = /(?:\.([^.]+))?$/;
        var ext = re.exec(file.name)[1];
        ext = ext.toUpperCase();
        if ( ext == "JPG" || ext == "JPEG" || ext == "PNG" ||  ext == "GIF" ||  ext == "BMP") 
        {
            done();
        }else { 
            done("Please select only supported picture files."); 
        }
    },
    success: function( file, response ) {
      obj = JSON.parse(response);
      file.previewElement.querySelector("file").src = obj.src;
      // alert(obj.src);return false;
    }
});
$('#submit_all').click(function(){   
  myDropzone.processQueue();
});

控制器功能,

   $com_id     = Auth::user()->company_id; 

   $file = Request::file('file');
        $destinationPath = public_path() . '/images/section/';
        $filename = strtolower($file->getClientOriginalName());

        $upload_success = $file->move($destinationPath, $filename);

        if ($upload_success) {

            $upload = new Cms_banner_master();
            $upload->product_banner = json_encode($filename);
            $upload->company_id = $com_id;
            $upload->home_banner ="1";
            $upload->save();

            return Response::json(array($fileName));
            } else 
            {
            return Response::json('error', 400);

        }

1 个答案:

答案 0 :(得分:-1)

如果要防止错误发生,可以先在文件上添加一些有效性检查。

例如使用 isValid 方法

更新:我也添加了 hasFile 方法。

if(Request::hasFile('file') {
    $file = Request::file('file');

    if($file->isValid()) {
        $destinationPath = public_path() . '/images/section/';
        $filename = strtolower($file->getClientOriginalName());

        $upload_success = $file->move($destinationPath, $filename);

        if ($upload_success) {
            ...
        }
    }
} else {
    return Response::json('No file uploaded', 409);
}

我还会为上传的文件生成一个新名称,这样你就不需要getClientOriginalName:

$filename = $com_id.'_'.date('YmdHis')'.'.$file->guessExtension();

本着#34;永远不要相信用户&#34;而不是让他们选择&#39;您将在服务器上保存的文件中的文件名。