PHP将上传文件的详细信息解析到Laravel 5中的表单提交上的另一个函数

时间:2015-09-23 13:51:28

标签: php validation laravel laravel-5 dropzone.js

我正在使用Laravel 5框架中的应用程序,该框架需要上传多个图像。为此,我有一个带有文件输入的表单(我研究并遇到了dropzone.js所以我这样使用它)

<form method="POST" enctype="multipart/form-data">
   <div class="form-group">
      <label for="inputAccName">Name:</label>
      <input type="text" name="inputAccName" class="form-control" id="inputAccName" required="true" value="{{ Auth::user()->name }}">
      <input type="hidden" name="_token" value="{{ csrf_token() }}">
   </div>
   <div class="dropzone" id="dropzoneFileUpload">
   </div>
   <script type="text/javascript">
      var baseUrl = "{{ url('/') }}";
      var token = "{{ Session::getToken() }}";
      Dropzone.autoDiscover = false;
       var myDropzone = new Dropzone("div#dropzoneFileUpload", { 
           url: baseUrl+"/user/uploadFiles",
           params: {
              _token: token
            }
       });
       Dropzone.options.myAwesomeDropzone = {
          paramName: "file", // The name that will be used to transfer the file
          maxFilesize: 2, // MB
          addRemoveLinks: true,
          accept: function(file, done) {

          },
        };
   </script>
   <input class="btn btn-success btn-lg" type="submit" name="formPassword" value="Save Changes">
</form>

因此,用户将输入名称并上传最多4张图片(至少需要1张)。

我有一个调用名为“UpdateUserX”的函数的POST路由,此函数在提交表单时更新数据库中的用户名。

在一个单独的函数中,我为文件上传添加了以下代码:

public function uploadFiles()
{

    $destinationPath = 'uploads'; // upload path
    $extension = Input::file('file')->getClientOriginalExtension(); // getting file extension
    $fileName = rand(11111, 99999) . '.' . $extension; // renaming image
    $upload_success = Input::file('file')->move($destinationPath, $fileName); // uploading file to given path

    if ($upload_success) {
        return Response::json('success', 200); 

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

}

上传图像时,dropzone会调用此函数。我想从这里做的是将上传图像的细节解析到UpdateUserX函数,这样我就可以在数据库中存储图像的细节。任何正确方向的建议都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

任何人都希望做类似的事情。我无法使用Dropzone.JS执行此操作,因为我无法使用现有表单来实现它。这样,它可以通过表单上传,我可以在我的控制器功能中捕获它。相反,我使用了文件类型的默认输入:

<input id="file" type="file" name="file[]" multiple="true">

然后我只是在我的UpdateUserX函数中捕获:

$files = Input::file('file');
$file_count = count($files);
// start count how many uploaded
$uploadcount = 0;
foreach($files as $file) {
  $rules = array('file' => 'required'); //'required|mimes:png,gif,jpeg,txt,pdf,doc'
  $validator = Validator::make(array('file'=> $file), $rules);
  if($validator->passes()){
    $destinationPath = 'uploads';
    $filename = $file->getClientOriginalName();
    $upload_success = $file->move($destinationPath, $filename);
    $uploadcount ++;
  }
}

如果将来我找到使用Dropzone或Bootstrap文件输入插件的方法,我会更新我的答案:https://github.com/kartik-v/bootstrap-fileinput

<强>更新

我找到了以下插件来设置文件输入的样式:http://markusslima.github.io/bootstrap-filestyle/#Getstart我现在使用它而不是Dropzone.JS和上面的代码。

通过JavaScript:

$(":file").filestyle({input: false});

通过数据属性:

<input type="file" class="filestyle" data-input="false">