2017-06-13 37 views
0

大家好,我正在使用angularjs java和rest來實現一個報告。根據選擇的UI字段,會調用Java Layer,並從java中調用一些數據庫調用,並將返回的輸入流以csv文件形式下載。 有一個問題發生,如果我做同樣的點擊相同的網址瀏覽器,即時通過angularjs比我能夠下載文件,但如果通過使用UI即時通訊使得請求比沒有下載選項和數據返回作爲http響應角度的流。正在下載一個Csv文件來自angularjs Jax-Rs和java

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"); 
     }); 
     }; 

從瀏覽器http://localhost:8080/IsaveIdeas/rest/files/csv相同的請求? parameters = {parameter}使我能夠下載文件。

回答

0

您可以使用一滴在angularjs這樣的代碼:

.... 
.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(); 
}