gpt4 book ai didi

http - multipart/form-data 中的二进制行(文件上传)

转载 作者:可可西里 更新时间:2023-11-01 15:13:05 26 4
gpt4 key购买 nike

我正在用 python 编写一个简单的网络服务器,允许用户使用 multipart/form-data 上传文件。据我所知,多部分 MIME 数据应该是基于行的。例如,边界必须在一行的开头。

我无法弄清楚在这方面如何处理二进制数据。我的客户端 (Firefox) 没有将它编码成 7 位 ASCII 或任何东西,它只是它发送的原始二进制数据。它是否将数据分成任意位置的行?是否为多部分数据指定了最大行长度?我尝试通过 RFC 查找 multipart/form-data,但没有找到任何内容。

最佳答案

在深入研究 RFC 之后,我想我终于明白了。正文部分(即 multipart/* 消息中单个部分的正文内容)只需要基于行,因为部分末尾的边界以 CR 开头+LF。但除此之外,数据不需要是基于行的,如果内容恰好有换行符,它们之间没有最大距离,也不需要以任何方式转义(好吧,除非 Content -Transfer-Encoding 是带引号的字符串)。 Content-Transfer-Encoding 的 7 位、8 位和二进制选项实际上并不表示已对数据进行任何编码(因此无需撤消任何编码),它们只是用来指示您可以在正文部分看到的数据类型。

我在 [表达不佳] 的问题中真正想知道的是如何从套接字读取/缓冲数据,以便我可以确保我捕获了边界,而不必有一个任意大的缓冲区(例如,如果内容中碰巧没有换行符,那么 readline 最终会缓冲整个内容)。

我最后做的是使用一个最大长度的 readline 从套接字中缓冲,所以缓冲区永远不会比那个长,但如果遇到换行符也会确保终止.这确保了当边界到来时(在 CR+LF 之后),它将位于缓冲区的开头。我不得不做一些额外的事情来确保我没有在实际的正文内容中包含最后的 CR+LF,因为根据 RFC,它需要在边界之前,因此不是内容本身。

关于http - multipart/form-data 中的二进制行(文件上传),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15664712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com