# Jersey 文件上传示例 – Jersey2 `MultiPartFeature`

> 原文： [https://howtodoinjava.com/jersey/jersey-file-upload-example/](https://howtodoinjava.com/jersey/jersey-file-upload-example/)

在此 **Jersey2 文件上传示例**中，我们将学习如何使用 Jersey 的**多部分表单数据支持**来**上传二进制文件**（例如本示例中的 PDF 文件）。 我们将在下面学习完成功能所需的更改。

```java
Table of Contents

1\. Jersey maven multipart dependency
2\. Add MultiPartFeature in web.xml
3\. Write Jersey Upload REST API
4\. Test file upload using HTML Form
5\. Test file upload using jersey client
```

## 1\. Jersey Maven 多部分依赖

要使用多部分功能，您需要将`jersey-media-multipart`模块添加到`pom.xml`文件中：

```java
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.19</version>
</dependency>

```

## 2\. 在`web.xml`中添加 Jersey `MultiPartFeature`

此外，您还需要在 Jersey 配置中添加`MultiPartFeature`，以使其知道您将使用多部分请求。 最简单的方法是通过`web.xml`文件添加支持。

```java
<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>
	<init-param>
		<param-name>jersey.config.server.provider.classnames</param-name>
		<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

```

## 3\. 编写 Jersey 文件上传 REST API

现在查看用于文件上传的实际 **REST API**，它将接收并保存文件。

```java
@POST
@Path("/pdf")
@Consumes({MediaType.MULTIPART_FORM_DATA})
public Response uploadPdfFile(	@FormDataParam("file") InputStream fileInputStream,
        						@FormDataParam("file") FormDataContentDisposition fileMetaData) throws Exception
{
	String UPLOAD_PATH = "c:/temp/";
	try 
	{
		int read = 0;
		byte[] bytes = new byte[1024];

		OutputStream out = new FileOutputStream(new File(UPLOAD_PATH + fileMetaData.getFileName()));
		while ((read = fileInputStream.read(bytes)) != -1) 
		{
			out.write(bytes, 0, read);
		}
		out.flush();
		out.close();
	} catch (IOException e) 
	{
		throw new WebApplicationException("Error while uploading file. Please try again !!");
	}
	return Response.ok("Data uploaded successfully !!").build();
}

```

## 5\. 使用 HTML 表单测试文件上传

只需在“`webapp`”文件夹中创建文件“`fileUpload.html`”文件，然后粘贴此代码即可。

```java
<html>
	<body>
		<h1>File Upload Example - howtodoinjava.com</h1>

		<form action="rest/upload/pdf" method="post" enctype="multipart/form-data">

			<p>Select a file : <input type="file" name="file" size="45" accept=".pdf" /></p>
			<input type="submit" value="Upload PDF" />

		</form>

	</body>
</html>

```

现在点击 URL：“`http://localhost:8080/JerseyDemos/fileUpload.html`”，它将显示一个 HTML 文件控件来浏览文件。 选择任何 PDF 文件，然后单击“`Upload PDF`”按钮。

您的文件将被上传，并且您将收到消息：“数据成功上传！”

## 5\. 使用 jersey 客户端测试文件上传

如果要使用 Java 客户端上传文件，则可以根据需要修改以下工作代码。

使用`FormDataMultiPart`示例上传 Jersey 文件。

```java
public static void main(String[] args) throws IOException 
{
	final Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build();

	final FileDataBodyPart filePart = new FileDataBodyPart("file", new File("C:/temp/sample.pdf"));
	FormDataMultiPart formDataMultiPart = new FormDataMultiPart();
	final FormDataMultiPart multipart = (FormDataMultiPart) formDataMultiPart.field("foo", "bar").bodyPart(filePart);

	final WebTarget target = client.target("http://localhost:8080/JerseyDemos/rest/upload/pdf");
	final Response response = target.request().post(Entity.entity(multipart, multipart.getMediaType()));

	//Use response object to verify upload success

	formDataMultiPart.close();
	multipart.close();
}

```

[**Jersey 文件上传示例源码**](//howtodoinjava.com/wp-content/uploads/2015/08/JerseyDemos-File-Upload.zip)

在评论框中输入您的与 **Jersey2 多部分文件上传示例**相关的问题。

学习愉快！

**参考： [https://jersey.java.net/documentation/latest/user-guide.html#multipart](https://jersey.java.net/documentation/latest/user-guide.html#multipart)**