【问题标题】:Laravel 5.3 multiple file uploadsLaravel 5.3 多文件上传
【发布时间】:2017-02-12 06:09:23
【问题描述】:

如何在Laravel 5.3 中上传多个文件。 如果我尝试使用 1 张图片,它可以工作,但不会上传多张图片。

这是我的代码:

if($request->hasFile('attachment')) {
    foreach($request->allFiles('attachments') as $file) {
        $file->store('users/' . $user->id . '/messages');
    }
}

【问题讨论】:

  • 你添加了 Form::file('myfile[]', ['multiple' => 'multiple']);
  • 我正在使用邮递员进行测试。所以是的,我已经做到了。
  • @Jamie 你现在如何将路径保存到数据库??

标签: php file laravel-5


【解决方案1】:
public function MultiImage(Request $request)
{
    $postimage=new Photo;

   if($request->hasfile("file")){
        foreach($request->file("file") as $img) {
            $filename = $img->getClientOriginalName();
            Image::make($img)->resize(200, 200)->save('banner/uploads/photo/'.$filename);
            $uploadPath = 'banner/uploads/photo/'.$filename;
            $data[]=$filename;
        }
        $postimage->code = time();
        $postimage->name = $filename;
        $postimage->private_state = $request->input('private_state');
        $postimage->description = $request->input('description');
        $postimage->titre = $request->input('titre');
        $postimage->mute = $request->input('mute');
        $postimage->user_id = $request->input('user_id');
        $postimage->save();
    }        
    return redirect()->route('timeline-photos');
}

je veux enregistrer plusieurs images dans la base de donnees avec laravel。 voici mon code et can n'enregistre qu'une seule 图像。 亲切,

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

这是在 laravel 中上传多个文件的控制器:

    public function fileUpload(Request $request)
    {
        if ($request->hasfile('filenames')) {
            foreach ($request->file('filenames') as $file) {
                $name = $file->getClientOriginalName();
                $file->move(public_path() . '/mytestfile/', $name);
                $data[] = $name;
            }
            return back()->with('Success!','Data Added!');
        }
    }

资源中的这个视图文件:

<html lang="en">
<head>
    <title>Multiple Image Upload</title>
    <script src="jquery/1.9.1/jquery.js"></script>
    <link rel="stylesheet" href="3.3.6/css/bootstrap.min.css">
</head>
<body>

<div class="container lst">
    <h3 class="well">Test Muliple Image Upload</h3>

    <form method="post" action="{{url('image-upload')}}" enctype="multipart/form-data">
        {{csrf_field()}}

        <div class="input-group hdtuto control-group lst increment" >
            <input type="file" name="filenames[]" class="myfrm form-control" multiple>
            <div class="input-group-btn">
                <button class="btn btn-success" type="button"><i class="fldemo glyphicon glyphicon-plus"></i>Add</button>
            </div>
        </div>

        <button type="submit" class="btn btn-success" style="margin-top:10px">Submit</button>
    </form>
</div>



<script type="text/javascript">
    $(document).ready(function() {
        $(".btn-success").click(function(){
            var lsthmtl = $(".clone").html();
            $(".increment").after(lsthmtl);
        });
        $("body").on("click",".btn-danger",function(){$(this).parents(".hdtuto control-group lst").remove();
        });
    });
</script>

</body>
</html>

【讨论】:

  • 这是否支持像 Instagram 这样的帖子中的 mp4/视频和图像?
【解决方案3】:

这是我的刀片的样子:

<div class="form-group row">
                                <label for="gallery-image" class="col-sm-3 text-left control-label col-form-label">Photo</label>
                                <div class="col-md-9">
                                    {{-- <input type="file" name="images[]" multiple> --}}
                                    <input type="file" class="form-control form-control-file"
                                     id="gallery-image" value="{{ old('gallery-image') }}" required name="gallery-image[]" multiple/>
                                     <span class="below-image-upload-msg">Advised image dimensions: 1920 x 450 pixels. File size should be less than 2Mb per image.</span>
                                </div>
                                @error('image')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                                @enderror
                            </div>

这就是控制器中的 store 函数的样子:

public function store(Request $request){
    $validation = Validator::make($request->all(), array(
        'gallery-id'    => 'required|integer|min:0',
        'gallery-image' => 'required|image|nullable|mimes:jpeg,png,jpg,gif|max:2048',
    ));
    $fileNameToStore="no-image.jpg";

    if(request('gallery-image'))
    {
        $iCount=0;
        foreach($request->file('gallery-image') as $thisImage){
            $fileNameWithExtension = $thisImage->getClientOriginalName();
            $memberName = Auth::user()->MemberProfile->member_tourist_office_name;
            

            $extension=$thisImage->getClientOriginalExtension();
            
            $fileNameToStore = $fileName.'_'.time().$iCount.'.'.$extension;

            $path= $thisImage->storeAs('public/images/members/gallery-images',$fileNameToStore);


            $isEnabled                                   = "0";   
            $galleryImage                                = new GalleryImage();
            $galleryImage->gallery_id                    = request('gallery-id');
            $galleryImage->gallery_image_caption         = " "; 
            $galleryImage->gallery_image                 = $fileNameToStore;
            $galleryImage->isEnabled                     = $isEnabled;

            $galleryImage->save();
            $iCount++;
        }
        return redirect('/galleryimage/create')->with('success', 'Image(s) successfully added to gallery!');
    }
}

【讨论】:

    【解决方案4】:

    用这个更简单的方法解决了这个问题。只要确保您的输入文件类型是这样的&lt;input type="file" name="images[]" multiple&gt;

    $i = 0;
    foreach($request->file('images') as $file){
        $photo = new Photo;
        // name it differently by time and count
        $imageName = time() . $i . '.' . $file->getClientOriginalExtension();
        // move the file to desired folder
        $file->move('folderName/', $imageName);
        // assign the location of folder to the model
        $photo->image = 'folderName/' . $imageName;
        $photo->status = 1;
        $photo->save();
        $i++;
    }
    

    【讨论】:

      【解决方案5】:

      Controller.Php / Laravel 5.7.28

      $files = $request->file('product_image_id');
      if($request->hasFile('product_image_id')){
          foreach ($files as $file) {
              $name = time(). $file->getClientOriginalName();
              $file->move('images',$name);
              $productImage = ProductImage::create(['image'=>$name]);
              $input ['product_image_id'] = $productImage->id;
          }
      }
      

      【讨论】:

        【解决方案6】:

        试试这样的:

        public function multiple_upload() {
            // getting all of the post data
            $files = Input::file('images');
        
            // Making counting of uploaded images
            $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 ++;
                 }
            }
        }
        

        【讨论】:

        • 谢谢,但这不是 Laravel 5.3 的新功能吗?
        【解决方案7】:

        如果你还想继续使用刀片,你可以使用这个:

        {{ Form::open(array('url' => 'upload', 'files'=>true)); }}
        {{ Form::file('gallery[]', array('multiple'=>true,'accept'=>'image/*'));  }}
        {{ Form::submit();  }}
        {{ Form::close();  }}
        

        在你的控制器中:

        files = $request->file('gallery');
        
        if($request->hasFile('gallery'))
        {
            foreach ($files as $file) {
               // $file->store('users/' . $this->user->id . '/messages');
                //dump($file);
            }
        }
        

        【讨论】:

          【解决方案8】:

          它现在是这样工作的:

          $files = $request->file('attachment');
          
          if($request->hasFile('attachment'))
          {
              foreach ($files as $file) {
                  $file->store('users/' . $this->user->id . '/messages');
              }
          }
          

          我必须在name 属性的值之后附加[],所以:

          <input type="file" name="attachment[]" multiple>
          

          【讨论】:

          • 我在你的问题中提到的 Form::file('attachment[]', ['multiple' => 'multiple']);
          • 但这对我不起作用。只有最后一个文件正在上传
          • @Jamie attachment[] 未显示在您的代码中?你的意思是应该这样吗?
          • 如果您想通过 Postman 进行测试,那么您还必须将密钥“file”附加到“file[]”,然后发送多个文件。请注意,因为您可以选择多个文件,即使 [] 未附加到键/名称“文件”。
          猜你喜欢
          • 2017-02-23
          • 1970-01-01
          • 1970-01-01
          • 2017-04-27
          • 2017-09-03
          • 1970-01-01
          • 2017-05-05
          • 2017-04-13
          • 1970-01-01
          相关资源
          最近更新 更多