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 文件上传如何处理大文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 XMPP XEP-0363:客户端使用 SMACK 库的 HTTP 文件上传功能?