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>
在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