【问题标题】:Create a download link in rails application在 Rails 应用程序中创建下载链接
【发布时间】:2017-11-06 08:20:42
【问题描述】:

我阅读了有关添加路由、向控制器添加方法以及在同一个应用程序中完成所有操作时使用 link_to 创建链接的信息。但我有单独的前端和后端项目。后端侧轨应用程序将负责从数据库读取并将 excel 文件返回到前端。如何在前端 Rails 应用程序中获得下载按钮?在我的测试场景中,我创建了一个下载 UI 按钮,其中包含控制器中的路由和方法。我想通过单击此按钮下载位于root/spec/test_data/myfile.xlsxxlsx 文件。

我尝试创建路由,在控制器中添加方法:

def download
  workbook_path = File.join( File.dirname(__FILE__), '../myfile.xlsx' )
  send_file(
    File.open( workbook_path ),
    filename: "myfile1.xlsx",
    type: "application/xlsx"
  )
end

我收到了这个错误

No such file or directory @ rb_sysopen - /engine/app/controllers/my_engine/../myfile.xlsx

如何仅通过路由和控制器操作下载我的本地 excel 文件?我没有show.html.erb,因为我已经创建了一个下载按钮。如果问题似乎不完整,我很抱歉。我正在使用 Rails 4。

【问题讨论】:

  • 链接似乎有效。更正 xlsx 文件的路径。

标签: ruby-on-rails ruby excel


【解决方案1】:

我会将文件移动到app 中的assets 文件夹中 然后做类似的事情

workbook_path = File.join(File.dirname(File.expand_path(__FILE__)), '../../assets/myfile.xlsx')

workbook_path = Rails.root.join('app', 'assets', 'myfile.xlsx')

【讨论】:

  • 谢谢 Xavier,移动到资产文件夹并且“File.join”工作。由于此应用程序是从服务器运行的 gem,Rails.root.join 不起作用。
【解决方案2】:

要修正您的具体情况,请使用:

workbook_path = Rails.root.join('spec/test_data/myfile.xlsx')

但我同意 Xavier 的观点,即资产是一种更好的方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-27
    • 2020-09-01
    • 2015-10-13
    • 1970-01-01
    • 2016-08-01
    • 2015-05-29
    • 2018-08-17
    • 1970-01-01
    相关资源
    最近更新 更多