joh*_*ser 1 csv ruby-on-rails angularjs
所以这可能是一个简单的问题,但我以前从未这样做过.
我有一个Rails操作,用于查询数据库并从查询结果中创建csv字符串.
我想获取查询字符串,将其放入.csv文件中,当用户发出与此方法关联的http请求时,.csv文件将下载到用户的计算机上.
我怎样才能做到这一点?
UPDATE
该文件是从rails发送的,但我前端的角度应用程序(请求csv)没有下载它.
这是我用来从rails应用程序请求文件的角度代码
$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
})
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该send_file方法,将路径作为第一个参数传递给文件,如Rails文档中所示.
UPDATE
您可以使用临时文件来保存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
Run Code Online (Sandbox Code Playgroud)
更新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();
})
}
Run Code Online (Sandbox Code Playgroud)
要使用重定向:
$scope.csvSubmit = function() {
var url = 'http://ip_addr:3000/api/csv/?' + 'input=' + encodeURI($scope.query_box);
window.location = url;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3676 次 |
| 最近记录: |