on it road .com

编写 Jersey 文件上传 REST API

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

@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();
}

使用 HTML Form 测试文件上传

只需在 webapp文件夹中创建一个文件 fileUpload.html文件并粘贴此代码。

<html>
	<body>
		<h1>File Upload Example - onitroad.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 文件,然后单击“上传 PDF”按钮。

Jersey maven 依赖

要使用多部分功能,我们需要将 jersey-media-multipart模块添加到 pom.xml文件中:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.19</version>
</dependency>
使用 Jersey multipart表单 上传二进制文件示例

在web.xml中添加Jersey MultiPartFeature

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

<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.onitroad.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>

使用jersey客户端测试文件上传

如果我们正在寻找使用 java 客户端上传文件,那么我们可以根据需要修改以下工作代码。

使用 FormDataMultiPart 示例上传 Jersey 文件。

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();
}
日期:2020-09-17 00:16:33 来源:oir作者:oir