繁体   English   中英

多个文件上传 Angular + Laravel

[英]Multiple Files upload Angular + Laravel

我正在使用 Angular。 我必须通过 API(用 Laravel 制作/编写)上传多张图片。 以下正文被 api 接受

portfolio_id: 2
portfolio_image: [ {file1}, {file2} ] //Accepts in this format. File Objects in an array

我的 angular 代码是:

HTML

 <div class="col-lg-12">
  <label class="file-upload-label">Upload Profile Picture</label>
  <input multiple (change)="fileSelected($event)" type="file" id="file" name="profile_pic"/>
  <label for="file" class="btn-2">Upload</label>
 </div>

组件.ts

  selectedFile;

  fileSelected(event) {
    console.log(event);
    this.selectedFile = <File>event.target.files;
    console.log("Selected Files are:",this.selectedFile)
  }

在按钮提交上,我正在从 component.ts 文件中运行以下 function:

  portfolioImage(){

  const formData =  new  FormData();
  formData.append("portfolio_id",  this.portfolioId);
  formData.append("portfolio_image", this.selectedFile)
  this.httpClient.post(this.URL, formData, httpOptionsMulti).subscribe(res =>  {
      console.log(res);
      alert('Files uploaded Successfully!');
  })
}

控制台 Output:在文件选择更改事件中我在 console.log 中看到以下内容

FileList [ File, File ]

展开数组后,我看到以下内容:

 FileList(2)
    0: File { name: "1.jpg", lastModified: 1578490559152, size: 317383, … }
    1: File { name: "2.jpg", lastModified: 1578490599778, size: 288174, … }
    length: 2

问题:提交时,我在网络选项卡上的参数中看不到任何内容,尽管我确实收到了成功上传图片的消息。

我尝试过的事情我尝试通过循环上传并将fileSelected(event) function 更改为:

 myFiles:string [] = [];
  fileSelected(event) {
    for (var i = 0; i < event.target.files.length; i++) { 
        this.myFiles.push(event.target.files[i]);
    }
}

并将 function 上传到:

portfolioImage(){
  console.log("myfile",this.myFiles);
  const formData =  new  FormData();
  formData.append("portfolio_id",  this.portfolioId);
  for(var i =  0; i <  this.myFiles.length; i++)  {  
      formData.append("portfolio_image",  this.myFiles[i]);
  } 
  this.httpClient.post(this.URL, formData, httpOptionsMulti).subscribe(res =>  {
      console.log(res);
      alert('Files uploaded Successfully!');
  })
}

但仍然没有运气。

摘要:如何在前端使用 angular 和在后端使用 laravel api 上传多个文件。 laravel api 接受文件作为数组中的对象:[ {file}, {file} ]。 任何帮助将不胜感激。 谢谢你。

您在上传 function 时犯了一个小错误,考虑给定

portfolioImage(){
  const formData =  new  FormData();
  formData.append("portfolio_id",  this.portfolioId);
  for(var i =  0; i <  this.myFiles.length; i++)  {  
      formData.append("portfolio_image[]",  this.myFiles[i]);
  } 
  this.httpClient.post(this.URL, formData, httpOptionsMulti).subscribe(res =>  {
      console.log(res);
      alert('Files uploaded Successfully!');
  })
}

应该按照给定的方式使用portfolio_image以使其成为formData 中的多个文件数组。 从您的 Laravel controller function 中,按照给定的方式使用以检查上传的临时文件。

public function uploader(Request $request){
    $data = [
        $request->allFiles(),
    ];
    return response()->json($data);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM