gpt4 book ai didi

ruby-on-rails - 如何提供从 Rails 下载的文件?

转载 作者:行者123 更新时间:2023-12-01 22:35:11 25 4
gpt4 key购买 nike

所以这可能是一个简单的问题,但我以前从未做过。

我有一个 Rails 操作,它查询数据库并根据查询结果创建一个 csv 字符串。

我想获取查询字符串,将其放入 .csv 文件中,当用户发出与此方法关联的 http 请求时,.csv 文件将下载到用户的计算机上。

我该怎么做?

更新

文件是从 Rails 发送的,但我在前端的 Angular 应用程序(请求 csv)没有下载它。

这是我用来从 Rails 应用程序请求文件的 Angular 代码

$scope.csvSubmit = function() {
var csv = $.post('http://ip_addr:3000/api/csv', { 'input': $scope.query_box });
csv.done(function(result){
//empty - after the request is sent I want the csv file to download
})
}

最佳答案

您可以使用send_file 方法,将文件路径作为第一个参数传递,如Rails documentation 中所示。 .

更新

您可以使用临时文件来保存 CSV,如下所示:

require 'tempfile'

# automatically creates a file in /tmp
file = Tempfile.new('data.csv', 'w')
file.write('my csv')
file.close

send_file(file.path)

# remove the file from /tmp
file.unlink

更新 2:AngularJS 下载

有两种方法可以做到这一点:您可以添加一个隐藏的 href 来下载页面中的文件并单击它,或者将用户重定向到单击按钮时发送文件的 Rails URL。请注意,重定向将使用 url 中的参数,因此根据 query_box 的结构,它不会很好地工作。

使用 CSV 向页面添加隐藏的 href:

$scope.csvSubmit = function() {
var csv = $.post('http://ip_addr:3000/api/csv', { 'input': $scope.query_box });
csv.done(function(result){
var hiddenElement = document.createElement('a');

hiddenElement.href = 'data:attachment/csv,' + encodeURI(result);
hiddenElement.target = '_blank';
hiddenElement.download = 'filename.csv';
hiddenElement.click();
})
}

使用重定向:

$scope.csvSubmit = function() {
var url = 'http://ip_addr:3000/api/csv/?' + 'input=' + encodeURI($scope.query_box);
window.location = url;
}

关于ruby-on-rails - 如何提供从 Rails 下载的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25063246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com