在我的Rails应用中,用户可以上传和下载文件。上传后,文件由Sidekiq工作人员处理。到目前为止,一切都很棒。
当用户想要下载时,Sidekiq需要再次处理文件并准备下载。我实现的方法是让用户触发文件处理,并发送一条通知,说“请在一段时间后重新加载页面以下载文件”。然后用户必须等待并猜测下载链接何时可用。然后,他必须再次点击下载链接,下载文件。
文件有一个名为“ready”的属性,处理完成后,“ready”属性设置为“true”。如果他现在重新加载,下载链接将可用。然后他可以点击它开始下载。
我的问题是,是否有人听取此属性更改,然后自动启动下载?
答案 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...");
}
}
不会扼杀服务器吗?
取决于其中有多少"轮询"发送/接收请求。您始终可以调整轮询的频率。但我认为对于初学者来说这是最简单的解决方案。