2017-06-13 155 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请求 –