http - HTTP 文件上传如何处理大文件?

标签 http file-upload tcp stream large-files

我只想详细说明这个问题:How does HTTP file upload work? .这是问题的形式:

<form enctype="multipart/form-data" action="http://localhost:3000/upload?upload_progress_id=12344" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>

当文件非常大(即 10 GB)时会发生什么?浏览器是否将所有数据放入 1 个请求中,然后将其发送到服务器? 当浏览器只有 2 GB RAM 时,它如何读取文件并构建请求?

假设文件是​​ CSV。假设服务器的 RAM 和磁盘空间很小。有没有办法将文件流式传输到服务器,以便服务器可以解析每一行,而不是将整个文件保存在其 RAM 或磁盘中?

非常感谢详细的解释(HTTP、TCP 等)

最佳答案

您可以在这里找到一些详细信息:

Large file upload though html form (more than 2 GB)

简而言之,远程 http 服务器决定了 HTTP POST 的最大大小。任何大于其配置的最大大小的东西,您都会收到错误消息。

开发您自己的解决方案是一种选择。对于大型 CSV 文件的示例,想象一个发送 1 行文件的 HTTP POST。 100 行需要 100 个 HTTP POST。

一个主要缺点是不能直接使用 HTML 表单。也许 JavaScript 可以为您处理这些帖子,例如这篇帖子的变体:

How to upload string as file with jQuery or other js framework

如果排序很重要(即发送某种序列号作为表单数据的一部分),您需要在两边做一些工作。

还有其他方法可以做到这一点。但希望以上建议能让您思考。

关于http - HTTP 文件上传如何处理大文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39952308/

相关文章:

http - 将应用上传到谷歌应用引擎时出现问题

Python Flask 应用程序重复 HTTP 请求

javascript - 使用 Angular js 将 FormData 文件与模型数据一起发布

java - 如何使用selenium Webdriver(Mac)中的Robot类上传多个文件?

蜂窝网络上的 TCP/UDP

reactjs - Axios 向重复的 url 发送帖子

node.js - 为什么多部分不生成关闭事件

javascript - 如何正确解除 jQuery 文件上传回调的绑定(bind)?

Ruby TCP/IP 客户端线程

c - 有没有办法检测到 TCP 套接字已被远程对等方关闭,而无需从中读取?