最近在做一个图片上传的功能,要求是 不刷新页面,并且显示上传的文件。结果翻了半天也没有太好的方式。。自己试了一下,提交 form 表单如果是纯文字的话,实现,但是加上 file_field 以后就撤了。。大家,有好点的办法嘛?我用的 paperclip 来 处理上传的文件。运行环境 ruby -1.9.3 rails 3.2.8
文件上传从本质上不支持 ajax 方式,如果要上传文件,必然会刷新。一般使用 iframe 的方式模拟 ajax 文件上传. 之前用过 jquery ajaxuploader 插件,现在比较推荐 jquery uploadify http://www.cnblogs.com/oec2003/archive/2010/01/06/1640027.html
单张上传的话其实简单 ajaxSubmit + form 后台
def upload_photo
photo = current_user.attachments.build(:photo => params[:photo])
render :text => { :success => photo.save, :id => photo.id, :photo_name => params[:photo].original_filename }.to_json
end
js
$('.attachment_panel.photo').find('a.submit').click ->
$this = $(this)
$file = $this.prev('input')
if $file.val()?
$this.parents('form').ajaxSubmit(
dataType: 'json'
beforeSend: ->
$('a.uploadImage').find('span').text('正在上传...')
success: (data) ->
if data.success
$('a.uploadImage').find('span').text(data.photo_name)
$('#newAssistance').find('textarea').data('attachment_id', data.id)
$this.closest('.attachment_panel').hide()
else
$('a.uploadImage').find('span').text('上传图片')
)
#8 楼 @glorySpring
用ajaxSubmit 这个插件,可以实现 ajax 提交表单,然后你在后台处理上传过程就行了
插件是 jquey.form.js
#28 楼 @glorySpring http://railscasts.com/episodes/381-jquery-file-upload 昨晚看这个视频搞定了 ajax 文件上传,jquery-file-upload + carrierwave
#7 楼 @fresh_fish 我用的 carrierwave 上传单张图片,使用 jquery 怎么解决?github 下载了几个源代码看不太懂。谢谢