【问题标题】:XMLHttpRequest multipart/form-data: Invalid boundary in multipartXMLHttpRequest multipart/form-data:多部分中的边界无效
【发布时间】:2013-09-06 14:10:21
【问题描述】:

我正在通过 XMLHttpRequest 发送帖子数据:

var xmlHttp=new XMLHttpRequest();
xmlHttp.open("POST", domain, true);
xmlHttp.setRequestHeader("Content-type","multipart/form-data");
var formData = new FormData();  
formData.append("data", data_json_string);
xmlHttp.send(formData);

在 Python 中,如果我尝试获取 POST(或 FILES 或其他任何内容)数据,则会出现错误:

MultiPartParserError: Invalid boundary in multipart: None

这永远行不通吗?我真的需要将表单主体创建为单个字符串,在其中循环参数并在每个参数之前和之后放置一个边界字符串吗?如果是这样,那应该是什么样子?如何从 Python 中的 POST 中获取它?或者有没有更简单的方法。我环顾四周,并没有找到太多关于此的内容。

顺便说一句,我正在使用“multipart/form-data”,因为我的字符串数据非常长,这是一种更快的发送方式。当我创建表单并将其发布到 iframe 时,它​​对我有用。但是这里我更喜欢xmlHttp。

【问题讨论】:

    标签: javascript python xmlhttprequest


    【解决方案1】:

    不要自己设置Content-Type 标头。 .send()ing 数据时会正确设置,包括正确生成的边界,这是您手动生成的标头缺少的。

    spec 明确指出.send(FormData) 将使用 multipart/form-data 编码。

    如果数据是 FormData

    令请求实体主体为运行multipart/form-data编码算法的结果,数据为表单数据集,UTF-8为显式字符编码。

    设mime type为“multipart/form-data;”、一个U+0020空格字符、“boundary=”和multipart/form-data编码算法生成的multipart/form-data边界字符串的串联.

    【讨论】:

    • 我担心它是 uri 编码它,从而使它更长。这是通过表单发送时的一个问题,并且设置标题会产生很大的不同。但也许 xmlHttp 不会发生这种情况?
    • 哇。我觉得这是不常见的知识。主要的前端 JS 框架都没有提到它——据我所知。
    猜你喜欢
    • 2017-10-11
    • 2012-09-03
    • 2018-08-06
    • 2016-09-08
    • 2021-11-21
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多