【问题标题】:Laravel 5.7 can't parse POST multipart/form-data requestLaravel 5.7 无法解析 POST 多部分/表单数据请求
【发布时间】:2019-06-01 02:33:23
【问题描述】:

我在 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 的表单数据?

【问题讨论】:

    标签: laravel laravel-5 multipartform-data


    【解决方案1】:

    问题是 Laravel 的 csrf protection。您需要将 csrf_token 添加到您的 formData

    formData.append('csrfmiddlewaretoken', '{{ csrf_token }}');
    

    或者你可以添加到你的帖子标题

            headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'},
    

    您还需要添加您的 http.post

        contentType: false,
        processData: false,
    

    这里是两个相关的答案firstsecond

    希望对你有帮助...

    【讨论】:

    • 感谢您的回答,但我没有使用csrf_token,我使用JWT进行授权并且JWT令牌已经在标头中。但是 contentType: false (deleted Content-Type 从标题中的选项得到了帮助。谢谢!
    【解决方案2】:

    似乎 photoalbum_id 已发送,但您没有将其插入数据库到 photoalbum_id 列。 修复插入代码并将您的数据插入到 photoalbum_id 列,或者如果您有时不想将数据插入该列,请将此列设置为可空或放置您的控制器代码以提供更好的帮助..

    【讨论】:

    • SQL插入代码是正确的,在Postman中测试过,但是问题得到了解答。谢谢!
    猜你喜欢
    • 2014-09-21
    • 2012-11-27
    • 2017-10-05
    • 2016-01-26
    • 2015-09-22
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多