`
wangsuting
  • 浏览: 29629 次
社区版块
存档分类
最新评论

rails download files by post request

 
阅读更多

刚做了一个下载文件,用的是get请求

1.先说用get请求:

window.location.href = "<%=ajax_batch_tracking_code_campaigns_url %>"

 

def ajax_batch_tracking_code
    file_path = Campaign.generate_tarcking_code_excel(params[:ids],client)
    send_file(file_path)
  end

 get请求会把参数带到url上,因为get请求的url长度有限制,所以当参数过长时get请求并不适用,所以研究了下怎么用post请求下载文件。

2.模拟一个form表单提交,这样是同步的:

var config = {method: 'post', url: '<%= ajax_batch_tracking_code_pretargetings_url()%>', data: {ids: BatchProcess.selected_ids().join(',')}};
var $form = $('<form method="' + config.method + '" />');
$form.attr('action', config.url);
for (var key in config.data) {
    $form.append('<input type="hidden" name="' + key + '" value="' + config.data[key] + '" />');
}
$(document.body).append($form);
$form[0].submit();
$form.remove();

  

 def ajax_batch_tracking_code
    file_path = Campaign.generate_tarcking_code_excel(params[:ids],client)
    send_file(file_path)
  end

 这样就可以通过post请求来达到下载文件的目的了。这时候需求又来了,点击下载按钮时,需要给页面上一个loading,当文件下载成功后loading消失,因为这种通过post请求的方式是同步的,没办法让loading消失(捕捉不到下载成功的事件),为了达到这个目的,可以用第三种方式:

3.通过ajax发送异步请求:

 

$.ajax({
              url : "<%= ajax_batch_tracking_code_pretargetings_url %>",
              type : "POST",
              data : {ids: BatchProcess.selected_ids().join(','), client_id: <%= @client.id%>},
              success : function(data) {
                  $("#ajax-loading_icon").hide();
              },
              error : function(data) {
                  console.log(data)
              }
          });

 controller#action代码如下

def ajax_batch_tracking_code
    file_name = Campaign.generate_tarcking_code_excel(params[:ids],client)
    respond_to do |format|
      @file_url = request.url.split(/zh-cn|en/)[0] + 'tracking_code/otv/' + file_name
      format.js {render :partial => "downloadFile"}
    end
  end

 另外需要建一个名为_downloadFile.js.erb的文件,文件内容如下:

 window.location.href = "<%=@file_url %>";

 

 

 

分享到:
评论

相关推荐

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    Ruby on Rails Tutorial Learn Rails by Example 的源代码

    《Ruby on Rails Tutorial: Learn Rails by Example》是Rails学习者们常常参考的一本书,由Michael Hartl撰写。这本书通过实际的示例项目“sample_app”引导读者深入理解Rails框架的各个方面。现在,我们来详细探讨...

    batch_request_api, 在 Rails 应用程序上,提供批处理操作的ruby 中间件.zip

    batch_request_api, 在 Rails 应用程序上,提供批处理操作的ruby 中间件 batch_request_api 用于实现批量创建。更新和删除的Rails 中间件 gem 。可以定制的中间件批量创建。更新和删除记录或者并行删除记录安装将...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    Agile Web Development with Rails

    《敏捷Web开发与Rails》是一本深度探讨使用Ruby on Rails框架进行敏捷Web应用开发的经典著作。这本书详尽地阐述了如何利用Rails的强大功能,高效、快速地构建动态、响应式的Web应用程序。Rails作为Ruby的一个开源Web...

    使用Aptana+Rails开发Rails Web应用(中文)

    例如,要在Rails应用中创建一个新的资源,如博客文章,你需要在models目录下创建一个名为`post.rb`的文件,定义Post类,并设置属性如标题和内容。在controllers目录下创建`posts_controller.rb`,定义控制器方法,如...

    Ruby on Rails入门例子

    - **生成器(Generators)**:Rails提供了强大的生成器工具,可以自动生成模型、控制器、迁移文件等,例如`rails generate model Post title:string content:text`。 - **数据库迁移(Database Migrations)**:...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    中文版rails教程

    1. **生成资源(Generating Resources)**:使用`rails generate`命令可以快速创建模型、控制器、视图等文件,如`rails generate scaffold Post title:string content:text`会生成一个名为Post的资源,包含相关的...

    Rails

    标题 "Rails" 指的是 Ruby on Rails,一个开源的Web应用程序框架,它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式。Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    rails api(文档)

    3. **路由优化**:Rails API的路由系统更侧重于资源操作,简化了API路由的定义,方便管理各种HTTP动词(GET, POST, PUT, DELETE等)。 4. **分页和过滤**:在构建API时,通常需要支持分页和过滤数据。Rails API可以...

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    rails 2.3.2离线安装rails 2.3.2离线安装

    rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...

    rails4.0.0

    引入了`find_by`和`find_or_create_by`等简洁的方法,使得数据库操作更加方便。同时,`update_all`和`destroy_all`方法现在可以直接接收SQL片段,提供了更大的灵活性。 2. **查询接口(Query Interface)** 这个版本...

    rails2.3.2

    标题 "rails2.3.2" 指的是 Ruby on Rails 框架的一个特定版本,即 2.3.2。Ruby on Rails(通常简称为 Rails)是一个基于 Ruby 语言的开源 Web 应用程序框架,它遵循 Model-View-Controller (MVC) 设计模式,用于构建...

    Agile Web Development with Rails 4

    It’s a broad, far-reaching tutorial and reference that’s recommended by the Rails core team. If you’re new to Rails, you’ll get step-by-step guidance. If you’re an experienced developer, this ...

    Rails recipes

    Rails Recipes是一本针对Ruby on Rails框架的实用书籍,它收集了一系列高效解决问题的技巧和方法,也被称为“Rails开发者的宝典”。作者们通过分享自己的经验和见解,为Rails程序员提供了一本既有实际操作指导又有...

Global site tag (gtag.js) - Google Analytics