Javascript 在浏览器上下载csv文件
我有RESTAPI,它发送csv字符串,如Javascript 在浏览器上下载csv文件,javascript,java,angularjs,csv,servlets,Javascript,Java,Angularjs,Csv,Servlets,我有RESTAPI,它发送csv字符串,如 "aa,bb\n cc,dd" 以下是Rest服务代码: @GET @Path("/getCsv") @Produces({"text/csv"}) public String getCSV( ) { return "aa,ba,\n,ac,da"; } 在UI端 生成get请求代码的角度资源代码如下: angular.module('csvHelper', ['ngResource','
"aa,bb\n cc,dd"
以下是Rest服务代码:
@GET
@Path("/getCsv")
@Produces({"text/csv"})
public String getCSV( ) {
return "aa,ba,\n,ac,da";
}
在UI端
生成get请求代码的角度资源代码如下:
angular.module('csvHelper', ['ngResource','configuration']).factory('csvHelper', function($resource,$rootScope){
return $resource(URL+'/api/getCsv/', {}, {
query: {method:'GET', params:{}, cache :true}
});
});
发出get请求并生成csv的代码如下
csvHelper.query({}, function(response) {
def.resolve(response);
},function(response) {
def.reject(response);
});
var prom = def.promise;
prom.then(function(text) {
$window.open("data:text/csv;charset=utf-8," + encodeURIComponent(text));
}, function(error) {
console.log('promise failed', error);
});
在网络选项卡中,我看到rest API正确发送数据:
"aa,ba,\n,ac,da"
但是当我下载csv文件时,我看到里面
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
我做错了什么
编辑
我厌倦了在控制台上打印响应,这就是我看到的:
[e { 0="a", $get=function(), $save=function(), more...}, e { 0="a", $get=function(), $save=function(), more...}, e { 0=",", $get=function(), $save=function(), more...}, e { 0="b", $get=function(), $save=function(), more...}, e { 0="a", $get=function(), $save=function(), more...}, e { 0=",", $get=function(), $save=function(), more...}, e { 0="\n", $get=function(), $save=function(), more...}, e { 0=",", $get=function(), $save=function(), more...}, e { 0="a", $get=function(), $save=function(), more...}, e { 0="c", $get=function(), $save=function(), more...}, e { 0=",", $get=function(), $save=function(), more...}, e { 0="d", $get=function(), $save=function(), more...}, e { 0="a", $get=function(), $save=function(), more...}]
编辑2
我将逻辑更改为使用$http,如下所示:
$http.get("http://myurl.com/api/getcsv")
.success(function (response) {console.log(success)});
我看到控制台上打印的成功消息,但没有看到弹出窗口
当我点击浏览器时,我看到下载文件的弹出窗口
我错过了什么
编辑3
这种改变奏效了
$http.get(compiledUrl).then(function (response) {
$window.open("data:text/csv;charset=utf-8," + encodeURIComponent(response.data));
},function(response){
console.log("error");
});
如果您只想下载CSV字符串,那么应该使用$http而不是$resource $resource返回:一个资源“类”对象,其中包含用于默认资源操作集的方法,可以选择使用自定义操作进行扩展
如果您只想下载CSV字符串,应该使用$http而不是$resource $resource返回:一个资源“类”对象,其中包含用于默认资源操作集的方法,可以选择使用自定义操作进行扩展
您可以使用两个自定义函数 一, 并使用上述功能下载result.csv文件
if(data.userlog == '')
return;
JSONToCSVConvertor(data.userlog, true);
您可以使用两个自定义函数 一, 并使用上述功能下载result.csv文件
if(data.userlog == '')
return;
JSONToCSVConvertor(data.userlog, true);
似乎您需要
JSON.stringify(text)
。您还应该使用encodeURI()
而不是encodeURIComponent()。是的,试试encodeURI。似乎不需要JSON.stringify,因为您正在返回文本。它不是JSON数据。如何使用JSON.stringify?请参阅第二条注释,因为某些原因,您没有返回普通字符串。尝试更改products注释,使其返回@products({“text/plain”})。目标是让您的响应成为字符串。似乎您需要JSON.stringify(text)
。您还应该使用encodeURI()
而不是encodeURIComponent()。是的,试试encodeURI。似乎不需要JSON.stringify,因为您正在返回文本。它不是JSON数据。如何使用JSON.stringify?请参阅第二条注释,因为某些原因,您没有返回普通字符串。尝试更改products注释,使其返回@products({“text/plain”})。目标是使您的响应成为字符串。$http返回承诺。。。所以,同样的逻辑是正确的,请用最新的代码编辑原始问题中的代码,以便我可以看一下。。。或者把它放进一个弹子里,它起作用了。谢谢我更改了代码,如编辑3$http返回承诺中所示。。。所以,同样的逻辑是正确的,请用最新的代码编辑原始问题中的代码,以便我可以看一下。。。或者把它放进一个弹子里,它起作用了。谢谢我更改了代码,如编辑3所示
if(data.userlog == '')
return;
JSONToCSVConvertor(data.userlog, true);