【问题标题】:Asynchronous processing asp.net mvc with client side progress feedback带有客户端进度反馈的异步处理asp.net mvc
【发布时间】:2011-03-18 17:00:55
【问题描述】:

我正在构建一个图像管理工具,我想知道如何创建类似 Vimeo 的体验。

描述需要发生的事情
用户将能够使用plupload 上传许多可能较大的图像(无需重新加载页面)。然后服务器会对每张上传的图片进行如下操作。

  • 图像将被调整为 几个版本(例如拇指,小, 中、大)
  • 每个副本都有 完成了一些图像处理(例如 卷积滤波器)
  • 这些已调整大小 副本将上传到 Amazon S3
  • 将存储有关每个图像的信息 到数据库(宽度,高度, 模仿类型,文件名)
  • 那么服务器应该触发某种反馈给用户

提供异步反馈
Plupload(图像上传工具)在将文件上传到我的服务器时具有非常好的视觉反馈,但是,我希望能够在服务器进行所有图像处理并上传到远程存储时向用户提供额外的反馈。

Vimeo 很好地做到了这一点。当您上传视频时,它会确认已上传,但随后会显示“我们正在对您的视频进行编码,请稍候”,并且 UI 会提供某种进度指示器。

图片上传到我的服务器后,我想给用户两种反馈。每次处理图像并将其上传到 S3 时,我都希望:

  • 在浏览器上更新消息 说“15 张图片中有 5 张是 已处理”,我想
  • 显示该图像的缩略图。

MVC 控制器动作示例

[HttpPost]
public virtual ContentResult Upload(Guid albumId)
{
  foreach (string file in Request.Files)
  {
    HttpPostedFileBase f = Request.Files[file] as HttpPostedFileBase;
    if (f.ContentLength == 0)
      continue;

    var uploadDir = Server.MapPath("~/uploads/"+ albumId);
    var filePath = Path.Combine(uploadDir, Path.GetFileName(hpf.FileName));
    f.SaveAs(filePath);

    // How can I trigger some async task here that would be able
    // to trigger some sort of feedback to the browser when complete?
    SomeAsyncImageProcessor.ProcessImage(albumId, filePath); // ???
  }

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

约束
使用此网络应用程序的人将使用最新版本的 Chrome。无需解决跨浏览器问题。我们正在使用 asp.net MVC 3 和 SQL Server 2005

谁能指出我正确的方向? 有没有什么很好的资源可以展示我如何完成这样的事情?

【问题讨论】:

  • 这称为 Comet(或 ReverseAJAX),目前 IIS 不太支持。看看这个:stackoverflow.com/questions/2259633/…
  • 你有没有找到解决方案:我正在尝试这样做:图像将被调整为多个版本(例如拇指、小、中、大)每个副本都会完成一些图像处理(例如卷积过滤器)这些调整大小的副本将上传到 Amazon S3 有关每个图像的信息将存储到数据库(宽度、高度、mimetype、文件名)但我无法成功,请您帮帮我吗?

标签: asp.net-mvc asp.net-mvc-3 asynchronous


【解决方案1】:

Rsenna 的评论链接到一个名为 WebSync 的东西,它是一个基于 .NET 的 Comet 实现。如果您在异步流程完成时绝对需要实时通知,那就太好了。

但是,我认为在您的情况下,老式投票可能就足够了。 SomeAsyncImageProcessor 仍然是一个异步进程(因此您的应用程序不会冻结。)

但是,一旦浏览器返回“成功”(表示上传已成功完成),您的页面就会开始定期轮询“状态”URL,可能是 1 或 2 秒(取决于您期望这些过程多长时间)采取。)

对于每个图像,按顺序检查状态 URL。 http://mysite/imageprocessor/status?albumId=guid&stepid=3

状态 URL 要么返回应重新检查状态的指示符,要么返回成功和指向亚马逊缩略图(或您网站上的 URL)的 URL。重新检查直到检查最后一步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2016-05-24
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多