像其他许多人一样,我关注了Rails-Cast #381,jQuery文件上传,经过努力,我已经完成了大部分工作。我可以成功地将一个或多个文件上传到亚马逊S3,并在我的数据库中创建相应的行。不过,我已经被进度条卡住好几天了。当文件上传完成,结果出现在我的列表中时,它们会出现在那里,但进度条保持为白色。问题似乎是我没有得到回调。我还没能让任何东西为progress:,progressall:,或:done工作。
我有一个文档模型,上传很简单。在我的流程中的第二步之前,我使用会话id来跟踪文档,因此在创建步骤中添加了会话id。相关代码如下:
文档控制器:
...
def create
@document = Document.new(document_params)
@document.session = request.session_options[:id]
respond_to do |format|
if @document.save
format.js
format.html { redirect_to documents_path, notice: 'Document was successfully created.' }
format.json { render action: 'index', status: :created, location: @document }
else
format.js
format.html { render action: 'new' }
format.json { render json: @document.errors, status: :unprocessable_entity }
end
enddocuments.js.coffee
$ ->
$('#new_document').fileupload
dataType: "script"
add: (e, data) ->
data.context = $(tmpl("template-upload", data.files[0]))
$('#new_document').append(data.context)
data.submit()
progress: (e, data) ->
if data.context
progress = parseInt(data.loaded / data.total * 100, 10)
data.context.find('.bar').css('width', progress + '%')
progressall: (e, data) ->
overallProgress = parseInt(data.loaded / data.total * 100, 10);
$('#all_progress .bar').css('width', overallProgress + '%')
done: (e, data) ->
alert("All finished")index.html.erb
(Table of documents here - new uploads insert porperly)
<h2>Upload Document</h2>
<%= form_for Document.new do |f| %>
<%= f.file_field :original, multiple: true, name: "document[original]" %>
<!-- The table listing the files available for upload/download -->
<% end %>
<div id="progress">
<div class="bar" style="width: 0%;"></div>
</div>
<div id="all_progress">
<div class="upload">
<div class="bar" style="width: 0%;"></div>
</div>
</div>
<script id="template-upload" type="text/x-tmpl">
<div class="upload">
{%=o.name%}
<div class="progress">
<div class="bar" style="width: 0%">
</div>
</div>
</div>
</script>在javascript中,我应该在上传结束时看到一个警告弹出窗口,但这从来没有发生过。如果我把它放在add:部分,它确实会在上传开始时显示出来。这是有效的,但.fileupload下的其他所有东西似乎永远不会被调用。
关于下一步该往哪里看的建议?
发布于 2014-03-14 23:04:10
现在一切都正常了(就像我发布问题时总是发生的那样)。当我写帖子的时候,我应该注意到这一点,但是在我认为我有四个空格的两个地方,我有一个制表符。显然,coffeescript不会将制表符解释为一组空格。这并没有抛出一个错误,但是它没有列出进度:(e,-> )->以及下面所有被忽略的东西。
https://stackoverflow.com/questions/22392843
复制相似问题