Php Laravel API正在接收写在引号之间的字符串;空";而不是空字段

Php Laravel API正在接收写在引号之间的字符串;空";而不是空字段,php,reactjs,laravel,laravel-5.6,form-data,Php,Reactjs,Laravel,Laravel 5.6,Form Data,我正在使用FormData构建一个表单,用于将文件和其他信息一起发送到Laravel API,但根据规则,该文件可能是null: $validator = Validator::make(Request::all(), [ ... "file" => "nullable|mimes:pdf,doc,docx" ]); 从前端发送FormData: const data = new FormData(); data.append("name", name); data.a

我正在使用
FormData
构建一个表单,用于将文件和其他信息一起发送到Laravel API,但根据规则,该文件可能是
null

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

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
的默认值为
null
,但当我检查
Request::all()
的日志时,我看到以下内容:

[2018-08-18 06:55:13] local.INFO: array (
  ..
  'file' => 'null',
) 

您的文件看起来像一个数组,所以您可以做的是检查它是否是一个数组。如果是,则分配文件[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);


在将文件附加到
formData
对象之前,使用
typeof
检查文件是否为
object

我建议您遍历传递的值,因为它使代码更加紧凑,并允许添加
n
个输入值


不要在表单数据中添加
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]);
}

您的验证已经将
文件
字段视为可选字段,因此后端应该可以处理它

因为您是说文件可能是空的,所以当文件为空时,您可以做的是返回文件而不是空的。类似于data.append(“file”,file?file[0]:file);这是你正在寻找的wt吗?我已经更新了我的答案,请检查它要求第二个参数是字符串或blob,这意味着如果它不是字符串,它很可能被强制为字符串。
null
的字符串值是
的“null”
而不是一个可为空的文件值,只要不将文件追加到formData中(如果没有)。在验证器中,将文件参数设置为可选,而不是可为null。否,它设置为
null
。如果我这样做,它会抛出一个错误,说它无法读取null的属性'length'。
 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]);
  }
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]);
}