做了一个可以批量下载百度搜索出来图片结果的小程序。
填入结果地址之后,通过分析找到图片的原始地址,然后开始下载。
填入结果地址之后用post提交到下载的action1里面开启一个线程开始下载图片。
在View里面用JavaScript设置了一个定时器,每隔一段时间去请求action2,但是在action2里面如何获得已经下载的图片数量呢并返回给View里面的JavaScript呢?正在下载的线程里面有一个对象,其中一个变量可以记录已经下载的图片数量,但是在action2中好像没法访问这个正在执行的线程。。
有点乱,谁能提供一个大概的思路也可以~
ps:上面这个没考虑一个用户同时下载多个的情况、、、
如果考虑这种需求,就要在客户端生产一个唯一标识传到服务端。。然后把key设成:
ProcessBar_userID_UniqID
单个文件下载百分比可以参考迅雷的做法,主要是通过http协议的range头
你的下载进度的意思是:一共有n张图片,现在下载了几张?
还是有一张图片。现在下载了这张图片的百分比?
如果是第一种情况那就很简单了。
利用线程共享变量意义不大,不如直接写全局变量
Action1:
#开始下载
#每个线程下载结束更新全局变量
Rails.cache.write("ProcessBar_" + current_user.id.to_s, {:total => n, :finished => m})
Action2:
process_info = Rails.cache.read(("ProcessBar_" + current_user.id.to_s)
process_percent = process_info[:finished] / process_info[:total].to_f