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

发生什么情况的说明
用户将能够使用plupload上传许多可能较大的图像(无需重新加载页面)。然后,服务器将对每个上传的图像执行以下操作。

  • 图像将被调整为
    多个版本(例如,拇指,小号,
    中,大)
  • 每个副本都有
    进行了一些图像处理(例如
    卷积过滤器)
  • 这些已调整大小
    副本将上传到Amazon S3
  • 有关每个图像的信息将被存储
    到数据库(宽度,高度,
    mimetype,文件名)
  • 然后,服务器应触发对用户
  • 的某种反馈

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

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

    在将图像上传到我的服务器后,我想向用户提供两种反馈。每次处理图像并将其上传到S3时,我都希望:
  • 在浏览器上更新消息
    说“15张图片中有5张
    已处理”,我想
  • 显示该图像的缩略图。

  • MVC Controller 操作示例
    [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

    谁能指出我正确的方向?
    有没有足够的资源来展示我如何完成这样的事情?

    最佳答案

    Rsenna的评论链接到称为WebSync的东西,该东西是基于.NET的Comet实现。如果您在异步过程完成时绝对需要实时通知,则非常好。

    但是,我认为老式轮询足以满足您的要求。 SomeAsyncImageProcessor仍然是一个异步进程(因此您的应用程序不会卡住)。

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

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

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

    关于asp.net-mvc - 异步处理asp.net mvc与客户端进度反馈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5355362/

    10-12 01:14