当前位置: 首页 > 教程 > WebService >

RESTful JAX-RS文件下载示例

精华
小牛编辑
165浏览
2023-03-14

在这小节中将演示如何通过JAX-RS API下载java中的文本文件,图像文件,pdf文件和excel文件。 为此需要编写几行代码。 在这里使用 jersey 实现来开发JAX-RS文件下载示例。

首先打开Eclipse,创建一个动态Web项目:JaxRsFileDownload 。项目结构如下图所示 -

Jersey Jar文件下载网址:https://jersey.github.io/download.html

需要指定不同的内容类型以下载不同的文件。 @Produces注解用于指定文件内容的类型。

  • @Produces("text/plain"): 用于下载文本文件。
  • @Produces("image/png"): 用于下载图片文件。
  • @Produces("application/pdf"): 用于下载PDF文件。
  • @Produces("application/vnd.ms-excel"): 用于下载Excel文件。
  • @Produces("application/msword"): 用于下载Word文件。

1. JAX-RS文本文件下载

文件:FileDownloadService.java -

package com.yiiba.rest;

import java.io.File;  
import javax.ws.rs.GET;  
import javax.ws.rs.Path;  
import javax.ws.rs.Produces;  
import javax.ws.rs.core.Response;  
import javax.ws.rs.core.Response.ResponseBuilder;  
@Path("/files")  
public class FileDownloadService {  
    private static final String FILE_PATH = "D:\\myfile.txt";  
    @GET  
    @Path("/txt")  
    @Produces("text/plain")  
    public Response getFile() {  
        File file = new File(FILE_PATH);  

        ResponseBuilder response = Response.ok((Object) file);  
        String download_filename = "yiibai_file.txt";
        response.header("Content-Disposition","attachment; filename="+download_filename);  
        return response.build();  

    }  
 }

文件: web.xml -

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xmlns="http://java.sun.com/xml/ns/javaee"   
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"   
id="WebApp_ID" version="3.0">  
 <servlet>  
    <servlet-name>Jersey REST Service</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.yiiba.rest</param-value>  
    </init-param>  
    <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Jersey REST Service</servlet-name>  
    <url-pattern>/rest/*</url-pattern>  
  </servlet-mapping>  
</web-app>

文件: index.html -

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JAX-RS文件下载示例</title>
</head>
<body>
    <a href="rest/files/txt">点这里下载文本文件</a>
    <br />
</body>
</html>

现在在服务器上运行此应用程序,您将看到以下输出:

点击下载链接,显示结果如下 -

2. JAX-RS图像文件下载

文件: FileDownloadService.java -

package com.yiibai.rest;  
import java.io.File;  
import javax.ws.rs.GET;  
import javax.ws.rs.Path;  
import javax.ws.rs.Produces;  
import javax.ws.rs.core.Response;  
import javax.ws.rs.core.Response.ResponseBuilder;  
@Path("/files")  
public class FileDownloadService {  
    private static final String FILE_PATH = "D:\\myimage.png";  
    @GET  
    @Path("/image")  
    @Produces("image/png")  
    public Response getFile() {  
        File file = new File(FILE_PATH);
        String filename = "yiibai_image.png";
        ResponseBuilder response = Response.ok((Object) file);  
        response.header("Content-Disposition","attachment; filename="+filename);  
        return response.build();  

    }  
 }

文件:web.xml 的内容与上面的例子相同。

文件:index.html 的内容如下所示 -

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JAX-RS文件下载示例</title>
</head>
<body>
    <a href="rest/files/txt">点这里下载文本文件</a>
    <br />
    <a href="rest/files/image">点这里下载图片文件</a>  
    <br />
</body>
</html>

3. JAX-RS PDF文件下载

文件:FileDownloadService.java -

package com.yiibai.rest;  
import java.io.File;  
import javax.ws.rs.GET;  
import javax.ws.rs.Path;  
import javax.ws.rs.Produces;  
import javax.ws.rs.core.Response;  
import javax.ws.rs.core.Response.ResponseBuilder;  
@Path("/files")  
public class FileDownloadService {  
    private static final String FILE_PATH = "c:\\mypdf.pdf";  
    @GET  
    @Path("/pdf")  
    @Produces("application/pdf")  
    public Response getFile() {  
        File file = new File(FILE_PATH);
        String filename = "yiibai_pdf.pdf";
        ResponseBuilder response = Response.ok((Object) file);  
        response.header("Content-Disposition","attachment; filename="+filename);  
        return response.build();  
    }  
 }

文件:web.xml 的内容与上面的例子相同。

文件:index.html 的内容如下所示 -

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JAX-RS文件下载示例</title>
</head>
<body>
    <a href="rest/files/txt">点这里下载文本文件</a>
    <br />
    <a href="rest/files/image">点这里下载图片文件</a>  
    <br />
    <a href="rest/files/pdf">点这里下载PDF文件</a>  
    <br />
</body>
</html>