如何在Rails中异步触发下载?

时间:2015-01-30 15:50:21

标签: ruby-on-rails asynchronous

在我的Rails应用中,用户可以上传和下载文件。上传后,文件由Sidekiq工作人员处理。到目前为止,一切都很棒。

当用户想要下载时,Sidekiq需要再次处理文件并准备下载。我实现的方法是让用户触发文件处理,并发送一条通知,说“请在一段时间后重新加载页面以下载文件”。然后用户必须等待并猜测下载链接何时可用。然后,他必须再次点击下载链接,下载文件。

文件有一个名为“ready”的属性,处理完成后,“ready”属性设置为“true”。如果他现在重新加载,下载链接将可用。然后他可以点击它开始下载。

我的问题是,是否有人听取此属性更改,然后自动启动下载?

1 个答案:

答案 0 :(得分:1)

执行@apneadiving建议:(伪代码)

var downloadCheck = setTimeout(checkIfDownloadReady, 3000); // 3 seconds

function checkIfDownloadReady() {
  var downloadReady = sendReqToServer('document/3/download-status'); // $.get for example
  if (downloadReady) {
     clearTimeout(downloadCheck);
     showDownloadButton();
  } else {
     displayMessage("Download is being prepared...");
  }
}
  

不会扼杀服务器吗?

取决于其中有多少"轮询"发送/接收请求。您始终可以调整轮询的频率。但我认为对于初学者来说这是最简单的解决方案。