简体   繁体   English

尝试使用 AJAX 在 Laraver 中上传单个文件时出现数组到字符串转换错误

[英]Array to String conversion error while trying to do a single file upload in Laraver using AJAX

I'm having form which submits one file and certain texts through AJAX, only problem is with the file upload through AJAX.我有一个通过 AJAX 提交一个文件和某些文本的表单,唯一的问题是通过 AJAX 上传文件。 The form dats is being submitted through FormData instance but getting an Array to String conversion error while trying to save the file.表单 dats 正在通过 FormData 实例提交,但在尝试保存文件时出现数组到字符串转换错误。 I'm attaching the scripts below.我附上了下面的脚本。

Controller:控制器:

public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'contact_number' => 'required|numeric',
            'email' => 'required', 
            'total_exp' => 'required|numeric',
            'skillsets' => 'required',
            'current_organization' => '',
            'remarks' => '',
            'file_name' => 'required|max:2048'
        ],
        [   
            'name' => 'This field is mandatory',
            'contact_number' => 'This field is mandatory',
            'email' => 'This field is mandatory', 
            'total_exp' => 'This field is mandatory',
            'skillsets' => 'This field is mandatory',
            'total_exp.numeric' => 'Only numberic values allowed',
            'contact_number.numeric' => 'Only numberic values allowed'
        ]);

        //try{
        $career = CareerForm::updateOrCreate([
            'name'=>$request->name,
            'contact_number'=>$request->contact_number,
            'email'=>$request->email,
            'total_exp'=>$request->total_exp,
            'skillsets'=>$request->skillsets,
            'current_organization'=>$request->current_organization,
            'remarks'=>$request->remarks,
            'file_name' => $request->file_name,
            ]);
        
        //if(request()->hasFile('file_name')){
        
        $file=$request->file('file_name');
        $fname = rand().'.'.$file('file_name')->getClientOriginalName().'.'.$file('file_name')->getClientOriginalExtension();
        $file->move(public_path('documents'),$fname);
        //$file->move(public_path('uploads'), $fname);
            //$request->file->move(public_path('uploads'), $fileName);*/
        /*$file = $request->file('file_name')->store('public/documents');
        Storage::disk('local')->put($request->file($request->file)->getClientOriginalName(), 'Contents');*/
        //}catch(Exception $e1){echo $e1;}
        return response()->json([
            "success" => true,
            
        ]);

View:看法:

@extends('layouts.app')

@section('content')

<h2>Career Form using AJAX</h2>
<form class="form-signin" id="form_todo"  enctype="multipart/form-data">
  <h1 class="h3 mb-3 font-weight-normal">Career Form</h1>
  <label for="inputEmail" class="sr-only">Name</label>
  <input name="name" type="text" id="inputName" class="form-control" placeholder="Name" required="" autofocus="">
  @error('name')
  <div class="text-red-500 mt-2 text-sm">
    {{$message}}
  </div>
  @enderror
  <label for="" class="sr-only">Contact Number</label>
  <input name="contact_number" type="" id="c_n" class="form-control" placeholder="Contact Number" required="" autofocus="">
  @error('contact_number')
  <div class="text-red-500 mt-2 text-sm">
    {{$message}}
  </div>
  @enderror
  <label for="" class="sr-only">Email</label>
  <input name="email" type="text" id="eml" class="form-control" placeholder="Email" required="" autofocus="">
  @error('email')
  <div class="text-red-500 mt-2 text-sm">
    {{$message}}
  </div>
  @enderror
  <label for="" class="sr-only">Total Experience</label>
  <input name="total_exp" type="" id="exp" class="form-control" placeholder="Total Experience" required="" autofocus="">
  @error('total_experience')
  <div class="text-red-500 mt-2 text-sm">
    {{$message}}
  </div>
  @enderror
  <label for="" class="sr-only">Skillsets</label>
  <input name="skillsets" type="text" id="skl" class="form-control" placeholder="Skillsets" required="" autofocus="">
  @error('skillsets')
  <div class="text-red-500 mt-2 text-sm">
    {{$message}}
  </div>
  @enderror
  <label for="" class="sr-only">Curent Organization</label>
  <input name="current_organization" type="text" id="c_o" class="form-control" placeholder="Current Organizations (Optional)" autofocus="">
  @error('current_organization')
  <div class="text-red-500 mt-2 text-sm">
    {{$message}}
  </div>
  @enderror
  <label for="" class="sr-only">Remarks</label>
  <input name="remarks" type="text" id="rem" class="form-control" placeholder="Remarks (Optional)" autofocus="">
  @error('remarks')
  <div class="text-red-500 mt-2 text-sm">
    {{$message}}
  </div>
  @enderror

  
  <input type="file" id="file_id" name="file_name[]" class="form-control">
  <!--<button type="button" id="btnFile" class="btn btn-primary">Submit File</button>-->
  
  <button class="btn  btn-primary btn-block" id="career_btn" type="submit">Submit</button>

</form>


<p class="mt-5 mb-3 text-muted">Done by Debajyoti Das</p>


<script type="text/javascript">
  $(document).ready(function() {
    $.ajaxSetup({
      headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      }

    });
  });
    $("#form_todo").on('submit',function(e) {
    //$("#career_btn").click(function(e) {

      e.preventDefault();
      //var formData = new FormData($(this)[0]);
      //var files = $("#file_id")[0].files;
      var formData = new FormData(this);
      //formData.append('file_id',files[0]);

      $.ajax({
        type: 'POST',
        url: "career/store",
        data: formData,
        datatype: 'JSON',
        contentType: false,
        cache: false,
        processData: false,
        success: function(data) {
        }
      });
    });
  
</script>

@endsection

JSON error message: Array to string conversion Any help will be appreciated. JSON 错误消息:数组到字符串转换任何帮助将不胜感激。

On your server You have accepted an array of files.在您的服务器上您已经接受了一组文件。

$files=$request->file('file_name');
foreach ($files as file) {
        $fname = rand().'.'.$file->getClientOriginalName().'.'.$file->getClientOriginalExtension();
        $file->move(public_path('documents'),$fname);

}

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

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