【问题标题】:does multipart/form-data sends the whole file data at one go or in a streammultipart/form-data 是一次性还是以流的形式发送整个文件数据
【发布时间】:2018-12-11 14:02:44
【问题描述】:

我需要通过 HTTP 将大文件上传到远程服务器。 我正在研究如何使用 multipart/form-data 发送数据。

我已经通过How does HTTP file upload work? 了解它如何使用边界分隔文件数据。

我想知道所有文件数据是一次性发送还是与多个请求一起流式传输到远程服务器。

因为如果一次性发送,不可能在远程服务器读取全部数据并写入文件。

但如果是流式传输,远程服务器如何解析流式传输数据,将这些流式传输数据写入文件并重做相同的事情,直到所有数据都流式传输。

对不起,如果这是一个菜鸟问题,我也在研究它。

也许它超出了 multipart/form-data 的范围,由 HTTP 自己处理。

感谢任何帮助。

【问题讨论】:

  • “一口气”是什么意思?一个文件绝对不会通过多个请求发送。 “如果一次性发送,则无法在远程服务器读取全部数据”是什么意思?这一切都取决于 Web 服务器及其背后运行的应用程序。
  • 我所说的“一次性”是指整个文件数据在请求正文中发送,或者文件数据被分成几个块,然后每个块被流式传输到远程服务器。很抱歉造成混乱,就我而言,由于内存限制,服务器无法一次性读取整个数据。即使它以块(idk)的形式流式传输,我也感到困惑,远程服务器必须组合这些块,然后将整个数据写入一个文件,从而将其保存在内存中,因此不适合这种用例。对不起,如果这是一个菜鸟问题。
  • 您使用的是哪种服务器应用程序?文件不会在多个请求中发送。文件被分解成一个请求流中的块。根据文件的大小和服务器可接受的最大大小标准,它可以是少量块或通过单个请求中的流发送的数千块。
  • 远程服务器可以使用nginx+php-fpm或者apache。我想知道的是 multipart/form-data 是自动将文件数据分成块并发送一个请求流还是必须手动完成,或者有一些标准方法可以做到这一点。
  • stackoverflow.com/questions/12871362/… 上面的链接提供了一种通过单个 HTTP 连接以块的形式发送文件数据的方法。 multipart/form-data 是否以同样的方式进行?另外,如果我想在服务器上写入数据,是否可以将第一个块数据写入文件,然后使用 multipart/form-data 将后面的块附加到同一个文件中?希望这不会令人困惑。

标签: http multipartform-data


【解决方案1】:

与发送的物流无关。重要的是在服务器端设置的最大请求大小。如何设置取决于使用的技术:IiS、Apache、nginx?如果浏览器的 post 请求超过了这个大小(因为文件太大),就会发生错误。浏览器端没有任何内容可以调整或更改以修复中断上传。除非您正在构建自己的浏览器:-)

【讨论】:

    猜你喜欢
    • 2021-01-07
    • 2012-10-01
    • 1970-01-01
    • 2018-04-08
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    相关资源
    最近更新 更多