在AspNet Core中具有进度更新的中到大型文件上载

时间:2016-10-31 17:14:40

标签: reactjs asp.net-core asp.net-core-mvc asp.net-core-1.0 asp.net-core-webapi

从中到大,我的意思是10mb - > 200mb(声音文件,如果这很重要)

基本上我想制作一个API,对文件本身进行一些频谱分析,这需要上传文件。但是出于UI / UX的原因,为上传过程设置进度条会很不错。实现这种互动的常见架构是什么。

上传文件的客户端应用程序将是一个javascript客户端(reactjs / redux),API是用ASP.NET Core编写的。我已经看到了一些使用websockets更新客户端进度的示例,以及客户端轮询状态更新的其他示例,给出了查询状态的资源URL。是否有任何最佳实践(或者#34;现代的方式来做这个")来做我应该知道的事情? TIA

1 个答案:

答案 0 :(得分:3)

通常,您只需要在控制器中将输入流读取到某个变量(特定于会话的变量,因为可能同时存在少量文件上载会话)时保存进度状态,然后从中获取此状态客户端由ajax请求(或信号器)。

您可以查看此示例:https://github.com/DmitrySikorsky/AspNetCoreUploadingProgress

我已经尝试了11 MB文件没有问题。有行

await Task.Delay(10); // It is only to make the process slower
在那里,不要忘记在真正的解决方案中删除它。

在此示例文件中由ajax加载,因此我没有尝试过大型文件,但您可以使用此示例中的iframe解决方案: https://github.com/DmitrySikorsky/AspNetCoreFileUploading

另一部分几乎相同。

希望这会对你有所帮助。如果有任何其他问题,请随时询问。