是否可以访问通过multipart / form-data发送的参数,而无需等待整个表单到达

时间:2017-07-23 15:14:01

标签: c# forms multipartform-data

我有一个非常大的视频文件,我通过 multipart / form-data 上传到网络服务。 它需要大约30秒才能到达,我宁愿不等待那么长时间来访问我随文件一起发送的参数。

我的问题很简单,我是否可以访问随表单发送的参数而无需等待上传视频负载?

可以使用标题或任何其他方法完成吗?

1 个答案:

答案 0 :(得分:1)

流媒体与缓冲

这是关于如何设置网络服务器的。对于IIS,您可以启用Streaming。

否则,默认情况下,IIS将使用'缓冲' - 在IIS中运行的应用程序可以获取之前,整个请求首先被加载到内存中(IIS无法访问的内存)。

不使用IIS?你必须弄清楚如何让网络服务器做同样的事情。

如何使用IIS进行流式传输:

Streaming large file uploads to ASP.NET MVC

请注意在内循环中读取文件的方式:

        while ((cbRead = clientRequest.InputStream.Read(rgbBody, 0, rgbBody.Length)) > 0)
        {
            fileStream.Write(rgbBody, 0, cbRead);
        }

这里不是像保存问题那样只保存数据,而是必须解析任何包含你所说的文件参数的xml / json / etc等等,并期望之后发送视频。如果这是一个快速的过程,您可以立即处理它们...然后获取视频的其余部分......或者您可以将它们发送到后台线程。

您可能无法解析它只是将您拥有的内容转储到json或xml解析器,顶部将有一个未关闭的标记或},直到视频数据上传后才关闭(但是这样做了。或者如果它是来自表单提交的多部分数据,正如您所暗示的那样,您将不得不自己解析部分上传,而不是仅仅向IIS询问帖子数据。

所以这很棘手,你可以先将1k写入一个带有时间戳的日志文件,然后证明你正在获取数据。之后,这只是编码问题。

让这个工作也意味着你必须对客户端以及它如何发送数据有一些控制权。

那是因为你至少必须确保它首先发送文件参数!

这让我感到担忧,因为,如果您掌握了客户端,为什么不能采用简单的路线(如Nobody和Nkosi所暗示的那样)并使用2个请求?你提到你需要一个。为什么不编写js客户端代码以在XHR中首先发送参数,然后在第二个请求中使用相关ID将文件绑定在一起? (服务器可以从第一个请求返回它,你可以在第二个请求发送它。)

显然,如果你只是有一个带有一些输入和文件上传并进行提交的表单,那么你需要一个请求;-)但是如果你对客户端有控制权,你就不会受到这种情况的影响。 / p> 祝你好运,这里有一些高级编程,但没有超高科技。你会让它工作!!!

如果您无法控制服务器代码,您可能会被卡住,如果服务器应用程序的网络服务器正在缓冲,服务器应用程序将无法获得任何内容,当然,如果您需要首先使用文件参数执行某些操作,这实际上意味着您可以控制服务器端; - )