我正在使用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 :(得分:1)
您的文件看起来像一个数组,所以您可以做的是检查是否为数组,如果是,则分配文件[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);
OR
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);
答案 1 :(得分:1)
与其向表单数据中添加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
字段视为可选字段,因此后端应该可以正常处理它。
答案 2 :(得分:0)
在将文件附加到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]);
}