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

PHP Parse details of uploaded files to another function on Form Submit in Laravel 5

我正在 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 张)。

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

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

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 函数,这样我就可以将图像的详细信息存储在数据库中。任何正确方向的建议将不胜感激。

万一有人想做类似的事情。我无法使用 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">