代码之家  ›  专栏  ›  技术社区  ›  fermoga

Laravel API正在接收在引号之间写入“null”而不是空字段的字符串

  •  1
  • fermoga  · 技术社区  · 6 年前

    我正在用 FormData 用于将文件和其他信息一起发送到Laravel API,但该文件可能是 null

    $validator = Validator::make(Request::all(), [
        ...
        "file" => "nullable|mimes:pdf,doc,docx"
    ]);
    

    从前端来看 表格数据

    const data = new FormData();
    
    data.append("name", name);
    data.append("instructions", instructions);
    data.append("reward", reward);
    data.append("deadline", deadline);
    data.append("file", file ? file[0] : null);
    

    file 默认值为 无效的 ,但当我检查 Request::all() ,我看到以下内容:

    [2018-08-18 06:55:13] local.INFO: array (
      ..
      'file' => 'null',
    ) 
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Hemadri Dasari    6 年前

    您的文件看起来像一个数组,因此您可以检查它是否是一个数组如果是,则分配文件[0]否则分配文件

    const data = new FormData();
    let fileData = file;
    if(Array.isArray(file)){
        fileData = file[0]; 
    }else{
        fileData = file
    }
    data.append("name", name);
    data.append("instructions", instructions);
    data.append("reward", reward);
    data.append("deadline", deadline);
    data.append("file", fileData);
    

    或者

    data.append("name", name);
    data.append("instructions", instructions);
    data.append("reward", reward);
    data.append("deadline", deadline);
    data.append("file", Array.isArray(file) ? file[0] : file);
    
        2
  •  1
  •   apokryfos    6 年前

    而不是添加 null 只需有条件地将数据添加到表单数据:

    const data = new FormData();
    
    data.append("name", name);
    data.append("instructions", instructions);
    data.append("reward", reward);
    data.append("deadline", deadline);
    if (Array.isArray(file) && file.length > 0) {
        data.append("file", file[0]);
    }
    

    您的验证已经处理了 file

        3
  •  0
  •   CodeZombie    6 年前

    利用 typeof 检查文件是否 object formData 反对。

    n 输入值的数目。

     let formData = new FormData();
      for(var key in userData){
       if(key == "file" && typeof userData['file'] == "object"){
         formData.append(key, userData[key][0]);
       }
        formData.append(key, userData[key]);
      }