当前位置: 首页 > 知识库问答 >
问题:

fetch-多部分/表单数据发布中缺少边界

卜鹏
2023-03-14

谢谢你过来。

我想使用fetch api发送一个new FormData()作为POST请求的body

手术看起来像这样

js prettyprint-override">var formData = new FormData()
formData.append('myfile', file, 'someFileName.csv')

fetch('https://api.myapp.com', 
  {
    method: 'POST',
    headers: {
      "Content-Type": "multipart/form-data"
    },
    body: formData
  }
)

这里的问题是边界,比如

boundary=--WebKitFormBoundaryyEmKNDsBKjB7QEqu

永远不要将其放入内容类型:标题中

应该是这样的

内容类型:多部分/表单数据;边界=----WebKitFormBoundaryyEmKNDsBKjB7QEqu

当您使用新XMLHttpRequest()尝试“相同”操作时,如下所示

var request = new XMLHttpRequest()
request.open("POST", "https://api.mything.com")
request.withCredentials = true
request.send(formData)

标题设置正确

内容类型:多部分/表单数据;边界=----WebKitFormBoundaryyEmKNDsBKjB7QEqu

所以我的问题是,

>

  • 在这种情况下,我如何使getch的行为完全像XMLHttpRequest

    如果这不可能,为什么?

    谢谢大家!这个社区或多或少是我职业成功的原因。

  • 共有3个答案

    陈德泽
    2023-03-14
    fetch(url,options)
    

    >

    • 对于a,它将类似于

    多部分/表单数据;边界=----WebKitFormBoundary7MA4YWxkTrZu0gW

    如您所见,边界是自动添加的。

    • 对于b,它是application/x-www-form-urlencoded

    薛弘阔
    2023-03-14

    我删除了“contenttype”并在http头中添加了“Accept”,这对我来说很有效。以下是我使用的标题,

    'headers': new HttpHeaders({
            // 'Content-Type': undefined,
            'Accept': '*/*',
            'Authorization': 
            "Bearer "+(JSON.parse(sessionStorage.getItem('token')).token),
            'Access-Control-Allow-Origin': this.apiURL,
            'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, PATCH, DELETE',
            'Access-Control-Allow-Headers': 'origin,X-Requested-With,content-type,accept',
            'Access-Control-Allow-Credentials': 'true' 
    
          })
    
    艾泰
    2023-03-14

    问题的解决方案是显式地将内容类型设置为定义,以便您的浏览器或您正在使用的任何客户端都可以设置它,并在其中添加该边界值。令人失望但却是真实的。

     类似资料:
    • 没有边界的多部分/表单数据请求是否有效?根据规范,当有超过1个部分时,使用边界将它们分开(并且该边界不应该是身体的一部分)。我有一个请求,其中有一个单一的主体作为原始内容或文件,在内容类型中,我们传递“多部分/表单数据”。这种要求实际上有效吗?

    • 所以这个HTML代码以正确的格式提交数据给我。 谢了!

    • 这几天我一直被这个问题难住了。如果有人能给我指出正确的方向,我将不胜感激!我一直在想如何通过facebooks graph api发布图像。 我从Facebook上下载了一张图片,它通过图形API显示在画布元素中。我正在修改这个元素,在上面画文本,然后想把它上传回facebook。我被上传卡住了。 以下是我看过的有帮助的链接,但我仍然卡住了: Facebook Graph API——使用JavaS

    • 我已经创建了一个使用“多部分/表单数据”的控制器 采样器请求对象 现在,我将尝试使用模拟MVC测试它,但我不知道如何将“多部分/表单数据”作为内容传递。我看到很多使用JSON的示例,但没有使用多部分/表单数据 有没有一种方法可以完成我的请求与多部分/form_data?理想情况下,它需要在MockHttpServletRequest的主体中

    • 在使用Axios、react时,我严重混淆了如何解决这个多部分边界。js和多部分/formdata。我已经坚持了两周来尝试解决这个问题,但我觉得我离解决它越来越近了,但无论我尝试什么解决方案,它仍然坚持。 我从这个主题中阅读并尝试了一些解决方案: 如何-后-多部分-表单数据-使用-获取-在-反应-本机 如何发送多部分表单数据与上传反应 如何发送-多部分-表单-数据-来自-反应-js-与-图像 这是

    • 我有一个表单数据以及文件要在同一职位上发送。对于ex,{duration:2000,file:test.wav}。我在这里看到了使用python请求发布多部分/表单数据的许多线程。它们很有用,尤其是这个。 我的示例请求如下: 5:59:55.338 Dbg 09900[DEBUG]处理程序解析异常[null]:org.springframework.web.multipart.multipartE