ASP MVC中的文件上传和处理

时间:2013-10-23 12:33:04

标签: c# asp.net asp.net-mvc-4 plupload uploading

我需要实现下一页:

用户点击按钮上传文件,选择文件并将其上传到服务器上。上传文件后将由转换器处理。转换器可以返回转换百分比。如何在页面上实现连续进度条(进度=上传进度+转换进度)?

我正在使用PlUpload - 此工具可以返回上传文件到服务器的百分比,但我无法覆盖返回的百分比。

我的上传动作:

   public ActionResult ConferenceAttachment(int? chunk, string name, Identity cid)
    {
        var fileUpload = Request.Files[0];

        var tempfolder = Path.GetTempFileName().Replace('.', '-');
        Directory.CreateDirectory(tempfolder);
        var fn = Path.Combine(tempfolder, name);

        chunk = chunk ?? 0;
        using (var fs = new FileStream(fn, chunk == 0 ? FileMode.Create : FileMode.Append))
        {
            var buffer = new byte[fileUpload.InputStream.Length];
            fileUpload.InputStream.Read(buffer, 0, buffer.Length);
            fs.Write(buffer, 0, buffer.Length);
        }

        // CONVERTING ....

        return Content("OK", "text/plain");
    }

哪种架构解决方案可以解决我的问题?或者哪个JS上传库?

2 个答案:

答案 0 :(得分:4)

您必须使用某种Real-Time连接或Streaming来执行此操作。

1)使用 SignalR ,您可以创建一个Hub来向客户证明进度,易于实施和强大。

Learn About ASP.NET SignalR

2)您可以针对PushStreamContent调整此示例,以便在转换时发送进度:

Asynchronously streaming video with ASP.NET Web API

答案 1 :(得分:0)

您可以根据需要设置缓冲区大小。但是,我想说一次上传8kb的文件数据。同时以异步方式启动流转换过程。但是,为了顺利进展,您想上传哪种文件?