在不先在本地存储的情况下在 Web 服务器上处理上传的文件?

Process Uploaded file on web server without storing locally first?

我正在尝试在网络服务器上实时处理用户上传的文件, 但似乎,APACHE 调用 PHP,仅在上传完整文件后才调用。

当我使用 CURL 上传文件并设置

Transfer-Encoding : "Chunked"

我取得了一些成功,但不能通过浏览器做同样的事情。

这个答案解释了那里的问题。 Can't set Transfer-Encoding :"Chunked from Browser"

简而言之,问题是,当用户将文件上传到网络服务器时,我希望网络服务器在第一个字节可用时立即开始处理它。 通过过程,我的意思是,将其通过管道传输到命名管道。

不想先将 500mb 上传到服务器,然后再开始处理它。

但使用当前的网络服务器 (APACHE - PHP),我似乎无法完成它。

有人可以解释一下,使用什么技术堆栈或解决方法,以便我可以通过浏览器上传大文件并在第一个字节可用后立即开始处理它。

如果你真的想要那个(抱歉,我认为那不是个好主意)你应该尝试寻找一个 FUSE 文件系统来完成你的工作。

也许已经有一个了https://github.com/libfuse/libfuse/wiki/Filesystems

或者你应该自己写。

但请记住,一旦上传完成并且 post 脚本完成其工作,临时文件将被删除

您可以使用 html5 可续传上传工具(如 Resumable.js)上传文件,并在收到后立即处理上传的部分。

或者作为解决方法,您可以找到上传文件的路径(通常在 /tmp 中),然后编写一个后台作业以将其流式传输到第三个应用程序。可能会更难。

可能还有其他解决方案...

可以使用 NodeJS/Multiparty 来做到这一点。 Here they have an example of a direct upload to Amazon S3. This is the form, which sets content type to multipart/form-data. And here为表单部件处理函数。 part 参数的类型为 ReadableStream,这将允许使用 data 事件对输入进行逐块处理。

有关节点 js 中可读流的更多信息是 here