从angularjs Jax Rs和java下载Csv文件

从angularjs Jax Rs和java下载Csv文件,java,angularjs,rest,Java,Angularjs,Rest,大家好,我正在使用AngularJSJava和rest实现一个报告。根据所选的UI字段,有一个对Java层的调用,从Java有一些数据库调用和返回的输入流,我正在csv文件中下载。 有一个问题发生了,如果我通过angularjs通过浏览器点击相同的url,那么我就能够下载文件,但是如果使用UI,我发出请求,那么就没有下载选项,并且数据作为http响应流返回给angularjs java代码: enter code here @Path("/files") public class

大家好,我正在使用AngularJSJava和rest实现一个报告。根据所选的UI字段,有一个对Java层的调用,从Java有一些数据库调用和返回的输入流,我正在csv文件中下载。 有一个问题发生了,如果我通过angularjs通过浏览器点击相同的url,那么我就能够下载文件,但是如果使用UI,我发出请求,那么就没有下载选项,并且数据作为http响应流返回给angularjs

java代码:

enter code here
    @Path("/files")
    public class DownloadCsvFile {

   @GET
   @Path("/csv")
   @Produces({MediaType.APPLICATION_OCTET_STREAM})
   public Response getFile() {
   StreamingOutput outp = new StreamingOutput() {
        @Override
        public void write(OutputStream out) throws IOException, 
        WebApplicationException { 
        String url ="http://someurl?
        indent=on&q=RCE_POST:2016&sort=id%20asc
        &rows=100000&start=0&wt=csv";
        final InputStreamReader is = new InputStreamReader(
                    ((HttpURLConnection) (new URL(url)).openConnection())
                    .getInputStream(),
                     Charset.forName("UTF-8"));

         IOUtils.copy(is, out);
        }   
    };

    ResponseBuilder response = Response.ok(outp);
    response.header("Content-Disposition", "attachment; 
    filename=\"testFile_file.csv\"");
    return response.build();

       }  }
AngularJs控制器代码:

enter code here
        var app = angular.module('myApp', ['ngProgress']);
        app.controller('myCtrl', function($scope,$http,ngProgressFactory) {
        // on submit the fun is called
        $scope.LMALLPeriodReport =function()
        {
          return $http.get("http://localhost:8080/IsaveIdeas/rest/files/csv?
          parameters="+parameter)
          //parameter contain the selected field in UI
          .then(function (response) {
           var result = response.data;
           alert("printing data");
         });
        };

来自浏览器的相同请求?parameters={parameter}允许我下载文件。

您可以在angularjs代码中使用Blob,如下所示:

....
.then(function (response) {

var fileName = "yourFileName.csv";
var a = document.createElement("a");
document.body.appendChild(a);
response.data = "\ufeff" + response.data;
var file = new Blob([response.data], {encoding:"UTF-8",type:'application/csv;charset=UTF-8'});
var fileURL = URL.createObjectURL(file);
a.href = fileURL;
a.download = fileName;
a.click();
}