我在Angular中使用以下代码将数据以multipart/form-data
的形式发送到我的Laravel 5.7
API端点:
sendImageFile(id: number, fileToUpload: File) {
const formData: FormData = new FormData();
formData.append('file', fileToUpload, fileToUpload.name);
formData.append('photoalbum_id', id.toString() );
this.headers.delete('Content-Type'); // remove default application/json setting
this.headers.append('Content-Type', 'multipart/form-data');
this.options = new RequestOptions({ headers: this.headers });
return this.http.post(this.url, formData, this.options)
.pipe(catchError(this.handleError));
}
我用这段代码检查了发送的数据:
new Response(formData).text().then(console.log);
在控制台中获取此结果:
------WebKitFormBoundaryRjHGSmIZUd0iUMK9
Content-Disposition: form-data; name="file"; filename="mice.jpg"
Content-Type: image/jpeg
here-is-some-blob-data
------WebKitFormBoundaryRjHGSmIZUd0iUMK9
Content-Disposition: form-data; name="photoalbum_id"
1
所以看起来数据(以及photoalbum_id字段)已被发送。
但是Laravel返回了500服务器内部错误,显示以下错误消息:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'photoalbum_id' cannot be null (SQL: insert into...
在这种情况下,我做错了什么?为什么Laravel没有解析表单数据?
csrf_token
,我使用 JWT 进行授权,并且 JWT 令牌已经在请求头中了。不过将contentType: false
(从头部删除 Content-Type 选项)确实有所帮助。谢谢! - netdjw