rails ajax提交文件或图片

所要用到的插件:
1.安装responds_to_parent,下载responds_to_parent放到vendor/plugins目录下

1.view层,以下写法是为了能在controller层取到正确的file路径:
<%form_for(:attach,:url=>{:controller=>'product',:action=>'submit_attach',:format=>:js},:html=>{:multipart => true,:id=>'p_'+index.to_s,:target => 'upload_frame'}) do |f| %>
<%=hidden_field_tag 'att_'+index.to_s,nil%>
<%=hidden_field_tag 'index',index%>
名称:<%=f.text_field :name,:size=>30 %><br />
信息:<%=f.file_field :photo,:size=>16 %> <!--只是一个虚拟字段-->
<%=f.submit '上传'%>
<iframe id='upload_frame' name="upload_frame" style="width:1px;height:1px;border:0px" src="about:blank">
</iframe>
<%end%>

2.model层,product_secret.rb
#文件上传处理
def self.filesave(upload,path)
File.open(path, "wb") { |f| f.write(upload.read) }
end


3. ##controller层,ajax上传附件代码
def submit_attach
flag=true
index=params[:index]
attr=params['att_'+index]
if attr.blank?
if params[:attach] && params[:attach][:photo] && params[:attach][:name]
name = Time.now.strftime("%y%m%d%I%M%S") + 'size'+ params[:attach][:photo].size.to_s ##防止文件名重复
suffix=File.extname("#{params[:attach][:photo].original_filename}")
name<<suffix
directory = "public/data" ##上传后文件的路径
path = File.join(directory, name)
attach=Attach.create(:name=>params[:attach][:name],:path=>path)
ProductSecret.filesave(params[:attach][:photo],path) ##上传文件
error="上传成功"
else
error="请填写完整信息,请重新上传"
flag=false
end
else
error="附件已上传"
flag=false
end
respond_to do |format|
if flag
format.js do
responds_to_parent do ##ajax调用
render :update do |page|
page.call('given_value',"pr_#{index}",attach.id)
page.alert(error)
end
end
end
else
format.js do
responds_to_parent do
render :update do |page|
page.alert(error)
end
end
end
end
end

end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值