原文: https://howtodoinjava.com/jersey/jersey-streamingoutput/
在此 Jersey 文件下载示例中,我们将学习编写一个 Jersey rest api ,该 API 可以流式传输或下载文件(例如 PDF/Excel/Text 文件)发送给请求的客户端。 我将使用javax.ws.rs.core.StreamingOutput类来构建此 JAX-RS API。
Table of Contents1\. REST API to stream file with StreamingOutput2\. Jersey file download demo3\. Maven dependencies4\. web.xml changes
1. 使用StreamingOutput传输文件的 REST API
以下是使用 JAX-RS Jersey 的StreamingOutput类编写流式 REST API 的源代码。
package com.howtodoinjava.jersey;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(){@Overridepublic 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();}}
2. Jersey 文件下载演示
如果点击 URL “http://localhost:8080/JerseyDemos/rest/download/pdf”,则会在浏览器中显示以下警告,以下载文件。 PDF 文件将被保存的filename将是您在Response.header()方法中设置的。

Jersey 文件下载示例
请确保您在 API 代码中指定的路径中存在文件,否则会出错。
3. Maven 依赖
为了快速参考,请参阅下面我用于此演示的 maven 文件。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd;<modelVersion>4.0.0</modelVersion><groupId>com.howtodoinjava.jersey</groupId><artifactId>JerseyDemos</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><repositories><repository><id>maven2-repository.java.net</id><name>Java.net Repository for Maven</name><url>http://download.java.net/maven/2/</url><layout>default</layout></repository></repositories><properties><jersey2.version>2.19</jersey2.version><jaxrs.version>2.0.1</jaxrs.version></properties><dependencies><!-- JAX-RS --><dependency><groupId>javax.ws.rs</groupId><artifactId>javax.ws.rs-api</artifactId><version>${jaxrs.version}</version></dependency><!-- Jersey2.19 --><dependency><groupId>org.glassfish.jersey.containers</groupId><artifactId>jersey-container-servlet</artifactId><version>${jersey2.version}</version></dependency><dependency><groupId>org.glassfish.jersey.core</groupId><artifactId>jersey-server</artifactId><version>${jersey2.version}</version></dependency><dependency><groupId>org.glassfish.jersey.core</groupId><artifactId>jersey-client</artifactId><version>${jersey2.version}</version></dependency></dependencies><build><finalName>JerseyDemos</finalName><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.7</source><target>1.7</target></configuration></plugin></plugins></build></project>
4. web.xml的更改
另外,如果您正在使用Jersey2 配置,请参考web.xml文件。
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>jersey-serlvet</servlet-name><servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class><init-param><param-name>jersey.config.server.provider.packages</param-name><param-value>com.howtodoinjava.jersey</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>jersey-serlvet</servlet-name><url-pattern>/rest/*</url-pattern></servlet-mapping></web-app>
在下面的评论部分中,将有关 Java 流文件下载示例的问题交给我。
学习愉快!
