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

Posted

技术标签:

【中文标题】HTTP 文件上传如何处理大文件?【英文标题】:How does HTTP file upload work for large files? 【发布时间】:2017-02-18 12:32:59 【问题描述】:

我只想详细说明这个问题: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 等)

【问题讨论】:

【参考方案1】:

你可以在这里找到一些细节:

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 文件上传如何处理大文件?的主要内容,如果未能解决你的问题,请参考以下文章

scrapy中如何处理大文件下载?

如何处理 XMPP XEP-0363:客户端使用 SMACK 库的 HTTP 文件上传功能?

el-upload上传时的文件类型和大小限制失效,如何处理?

如何处理大字符串和有限的内存

Pandas中如何处理大数据?

如何处理大 JSON 响应