我正在使用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函数,这样我就可以在数据库中存储图像的细节。任何正确方向的建议都会受到赞赏。
答案 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">