ruby – Sinatra,进度条在上传形式
我正在开发一个由上传表单组成的Sinatra应用程序,进度条指示上传的内容已经完成.
如 ryan dahl所述,这个过程如下:
每次上传都有一个随机的会话ID,并跟踪我在应用程序中使用一个类变量的关联(我知道这太可怕了 – 如果你有更好的想法,请告诉我) configure do @@assoc = {} end 我有一个POST路由上传,一个GET一个AJAX轮询. post '/files' do tmp = params[:file][:tempfile] # from here on,@@assoc[@sid] should have a value,even in other routes @@assoc[@sid] = { :file => tmp,:size => env['CONTENT_LENGTH'] } File.open("#{options.filesdir}/#{filename}",'w+') do |file| file << tmp.read end end 在GET路由中,我根据Tempfile的当前大小计算百分比: get '/status/:sid' do h = @@assoc[params[:sid]] unless h.nil? percentage = (h[:file].size / h[:size].to_f) * 100 "#{percentage}%" else "0%" end end 问题是,直到POST请求尚未完成(即,在它已经读取了所有的Tempfile之后)h.nil?返回true,这没有什么意义,因为我刚刚在另一个路由中分配了@@ assoc [@sid]值. 那么,我在这里缺少什么? 编辑:我试过 > set:reload,false 没有工作. 解决方法
我想我有什么问题是:
tmp = params [:file] [:tempfile]不会返回,直到文件被完全收到. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |