为什么没有在Laravel5.6中将多个图像保存到表中

8iwquhpp  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(351)

在我的laravel应用程序中,我有一个保存多个图像的表单,以保存上传表,我的表单如下,

<form method="post" action="{{url('form')}}" enctype="multipart/form-data"> 
            {{csrf_field()}}
<div class="form-group row required">
            <div class="field" align="left" >
            <h3>Upload  images</h3>
            <input type="file" class="files" name="files[]" multiple />
            <input type="file" class="files" name="files[]" multiple />
            <input type="file" class="files" name="files[]" multiple />
            <input type="file" class="files" name="files[]" multiple />
            </div>
</div>

和jquery查询图像,

<script>
     $(document).ready(function() {
  if (window.File && window.FileList && window.FileReader) {
    $(".files").on("change", function(e) {
      var clickedButton = this;
      var files = e.target.files,
        filesLength = files.length;
      for (var i = 0; i < filesLength; i++) {
        var f = files[i]
        var fileReader = new FileReader();
        fileReader.onload = (function(e) {
          var file = e.target;
          $("<span class=\"pip\">" +
            "<img class=\"imageThumb\" src=\"" + e.target.result + "\" title=\"" + file.name + "\"/>" +
            "<br/><span class=\"remove\">Remove image</span>" +
            "</span>").insertAfter(clickedButton);
          $(".remove").click(function(){
            $(this).parent(".pip").remove();
          });
          });
        fileReader.readAsDataURL(f);
      }
    });
  } else {
    alert("Your browser doesn't support to File API")
  }
});
 </script>

控制器的存储功能是,

$photos = $request->file('files');

        if (!is_array($photos)) {
            $photos = [$photos];
        }

        if (!is_dir($this->photos_path)) {
            mkdir($this->photos_path, 0777);
        }

        for ($i = 0; $i < count($photos); $i++) {
            $photo = $photos[$i];
            $name = sha1(date('YmdHis') . str_random(30));
            $save_name = $name . '.' . $photo->getClientOriginalExtension();
            $resize_name = $name . str_random(2) . '.' . $photo->getClientOriginalExtension();

            Image::make($photo)
                ->resize(250, null, function ($constraints) {
                    $constraints->aspectRatio();
                })
                ->save($this->photos_path . '/' . $resize_name);

            $photo->move($this->photos_path, $save_name);

            $upload = new Upload();
            $upload->filename = $save_name;
            $upload->resized_name = $resize_name;
            $upload->original_name = basename($photo->getClientOriginalName());
            $upload->vehicle_id = $vehicle->id;
            $upload->save();

但是当我在上面的表格中附上4张图片时。它只保存一个图像。附加到第一个输入文件的。为什么其他图像没有保存到表中。我怎样才能解决这个问题?

nszi6y05

nszi6y051#

你要么 multiple 属性,或者只使用一个文件输入 multiple 属性。因为 multiple 属性使单个文件输入能够通过在“文件浏览”对话框中选择多个文件一次上载多个文件。
在控制器中,不应使用 $request->file(...) 因为它只检索一个文件,而不是一个文件数组。而是使用 $request->images 并将文件输入的名称从 files[]images[] 防止与…发生冲突 $request 拥有名为“files”的属性。

相关问题