Laravel 5.7 无法解析 POST multipart/form-data 请求
Laravel 5.7 can't parse POST multipart/form-data request
我在 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 返回一个内部服务器错误,错误消息为:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'photoalbum_id' cannot be null (SQL: insert into...
在这种情况下我做错了什么?为什么不解析 Laravel 表单数据?
似乎 photoalbum_id 已发送,但您没有将其插入数据库的 photoalbum_id 列。
修复插入代码并将您的数据插入 photoalbum_id 列,或者如果您有时不想将数据插入该列,请将此列设置为可空,或者放置您的控制器代码以更好地帮助 ..
问题是 Laravel 的 csrf protection。您需要将 csrf_token 添加到您的 formData
formData.append('csrfmiddlewaretoken', '{{ csrf_token }}');
或者您可以添加到您的 post header
headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'},
您还需要添加您的 http.post
contentType: false,
processData: false,
希望对您有所帮助...
我在 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 返回一个内部服务器错误,错误消息为:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'photoalbum_id' cannot be null (SQL: insert into...
在这种情况下我做错了什么?为什么不解析 Laravel 表单数据?
似乎 photoalbum_id 已发送,但您没有将其插入数据库的 photoalbum_id 列。 修复插入代码并将您的数据插入 photoalbum_id 列,或者如果您有时不想将数据插入该列,请将此列设置为可空,或者放置您的控制器代码以更好地帮助 ..
问题是 Laravel 的 csrf protection。您需要将 csrf_token 添加到您的 formData
formData.append('csrfmiddlewaretoken', '{{ csrf_token }}');
或者您可以添加到您的 post header
headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'},
您还需要添加您的 http.post
contentType: false,
processData: false,
希望对您有所帮助...