- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在开发一个 Sinatra 应用程序,它包含一个上传表单,并带有一个进度条,指示上传完成了多少。该过程,如 ryan dahl 所述, 如下:
HTTP upload progress bars are rather obfuscated- they typically involve a process running on the server keeping track of the size of the tempfile that the HTTP server is writing to, then on the client side an AJAX call is made every couple seconds to the server during the upload to ask for the progress of the upload.
每次上传都有一个随机的 session-id
,为了跟踪关联,我在我的应用程序中使用了一个 class variable
(我知道,这很糟糕——如果你有更好的想法,请告诉我)
configure do
@@assoc = {}
end
我有一个用于上传的 POST
路由,还有一个用于 AJAX 轮询的 GET
路由。在 POST
路由中,我保存了 session-id
、Tempfile
和总大小的关联。
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
,这实际上没有意义,因为我刚刚在另一条 route 为 @@assoc[@sid]
分配了一个值。
那么,我在这里缺少什么?
编辑:我试过了
设置:reload, false
设置:环境,:生产
配置{@@assoc ||= {} }
均无效。
最佳答案
我想我明白问题是什么了:
tmp = params[:file][:tempfile]
在文件被完全接收之前不会返回。
关于ruby - Sinatra,上传表单中的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3095936/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!