【问题标题】:Invalid input file upload api platform输入文件上传api平台无效
【发布时间】:2019-10-03 22:30:48
【问题描述】:

我正在尝试使用api platform file upload 上传文件。我正在使用带有 redux-saga 的 React-redux 来发出此请求,但服务器不断抛出错误的请求响应。

Api 平台文档说明了以下请求:

此端点接受标准的多部分/表单数据编码数据,但 不是 JSON 数据。您需要相应地格式化您的请求。

我的传奇: 我尝试将我上传的文件附加到 formData 并将其用作我的请求的正文。

 let data = new FormData();
 data.append("file", action.payload.file)

 const fileResponse = yield call(
   fetch,
   `${api.url}/api/media_objects`,
   {
     method: 'POST',
     mode: 'no-cors',
     body: data,
     headers: { 'content-type': 'multipart/form-data' }
   }
 );
 return console.log(fileResponse);

这是发布新媒体对象的 api 平台示例请求

curl -X POST “https://api.myroute/api/media_objects”-H “接受:应用程序/ld+json”-H“内容类型:多部分/表单数据” -F "file=@1.6b.jpg;type=image/jpeg"

Api 平台不断返回 400 错误,表示输入无效。知道有效输入应该是什么样子吗?

对于我的媒体对象实体,我遵循api platform documentation,因此它看起来与文档中的完全相同

【问题讨论】:

    标签: reactjs symfony react-redux redux-saga api-platform.com


    【解决方案1】:

    细节很重要

    headers: { 'content-type': 'multipart/form-data' }
    

    应该是

    headers: { 'Content-Type': 'multipart/form-data' }
    

    没有'content-type',只有'Content-Type' 标头被定义(RFC)并被广泛接受。

    【讨论】:

      【解决方案2】:

      我最近遇到了一个非常相似的问题(我不记得确切的错误),API 平台(和 MediaObject 实体)和 React - redux(但没有 redux-saga)。

      我可以通过删除请求的标头部分来修复它:

      headers: { 'content-type': 'multipart/form-data' }
      

      所以我的新请求与我的情况完全一样:

      const formData = new FormData();
          formData.append('file', file);
          return fetch(id, {
            method: 'POST',
            body: formData
          })
          ...
      

      我真的不知道为什么,但它成功了。也许它是自动处理的,因为我们发送了一个 FormData 对象。

      希望它也对你有用!

      【讨论】:

      • 嘿,谢谢你的回答,但我已经尝试删除标题但它仍然抛出无效输入的 400 错误,我在没有标题的邮递员中尝试了同样的方法,它在那里工作。真的不知道是什么导致了问题
      猜你喜欢
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 2020-08-19
      • 2020-11-15
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多