ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# Jersey 文件下载示例 – `StreamingOutput` > 原文: [https://howtodoinjava.com/jersey/jersey-streamingoutput/](https://howtodoinjava.com/jersey/jersey-streamingoutput/) 在此 **Jersey 文件下载示例**中,我们将学习编写一个 Jersey [rest api](//howtodoinjava.com/restful-web-service/) ,该 API 可以流式传输或下载文件(例如 PDF/Excel/Text 文件)发送给请求的客户端。 我将使用[`javax.ws.rs.core.StreamingOutput`](https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/StreamingOutput.html)类来构建此 **JAX-RS** API。 ```java Table of Contents 1\. REST API to stream file with StreamingOutput 2\. Jersey file download demo 3\. Maven dependencies 4\. web.xml changes ``` ## 1\. 使用`StreamingOutput`传输文件的 REST API 以下是**使用 JAX-RS Jersey 的`StreamingOutput`类**编写流式 REST API 的源代码。 ```java 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() { @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(); } } ``` ## 2\. Jersey 文件下载演示 如果点击 URL “`http://localhost:8080/JerseyDemos/rest/download/pdf`”,则会在浏览器中显示以下警告,以下载文件。 PDF 文件将被保存的`filename`将是您在`Response.header()`方法中设置的。 ![Jersey file download example](https://img.kancloud.cn/dc/61/dc61ba338ec8e7e96657feb1f16e3329_700x145.png) Jersey 文件下载示例 请确保您在 API 代码中指定的路径中存在文件,否则会出错。 ## 3\. Maven 依赖 为了快速参考,请参阅下面我用于此演示的 maven 文件。 ```java <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 配置](//howtodoinjava.com/jersey/jersey-2-hello-world-application-tutorial/),请参考`web.xml`文件。 ```java <!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> ``` [源码下载](//howtodoinjava.com/wp-content/uploads/2015/08/JerseyDemos_FileDownload.zip) 在下面的评论部分中,将有关 **Java 流文件下载示例**的问题交给我。 学习愉快!