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">
我正在 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">