2017-06-13 163 views
1

我們如何使用api中的查詢參數作爲輸入流,使用來自angularjs的其餘api的get請求來下載文件作爲中間層和java層數據。 請幫助 流量是像這樣:如何使用StreamingOutput下載CSV文件

 request From angular controller -------get/api?name=xyz --- java --- 
     query to database for InputStream = "name=xyz using http client"; 
     response is in csv format itself. 
     Response need to be downloaded into a file 

回答

0

下面是用於編寫使用StreamingOutput類使用JAX-RS的球衣流REST API的源代碼。

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.WebApplicationException; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.StreamingOutput; 

@Path("/download") 
public class JerseyService 
{ 
    @GET 
    @Path("/pdf") 
    public Response downloadPdfFile() 
    { 
     StreamingOutput fileStream = new StreamingOutput() 
     { 
      @Override 
      public void write(java.io.OutputStream output) throws IOException, WebApplicationException 
      { 
       try 
       { 
        java.nio.file.Path path = Paths.get("C:/temp/test.pdf"); 
        byte[] data = Files.readAllBytes(path); 
        output.write(data); 
        output.flush(); 
       } 
       catch (Exception e) 
       { 
        throw new WebApplicationException("File Not Found !!"); 
       } 
      } 
     }; 
     return Response 
       .ok(fileStream, MediaType.APPLICATION_OCTET_STREAM) 
       .header("content-disposition","attachment; filename = myfile.pdf") 
       .build(); 
    } 
} 

注意:如果你打的網址,你將看到在你的瀏覽器下載文件的警報。 PDF文件將被保存的文件名將是您在Response.header()方法中設置的內容。

+0

感謝回覆,但這項工作很好,當你從瀏覽器做一個簡單的獲取請求,但它不起作用,當我們使用angularjs和休息客戶端進行相同的api請求 –