如何创建端点以在Jersey上传文件?

时间:2016-08-05 08:58:50

标签: jersey jersey-2.0

我想写一个允许我上传文件的API。 我想将日志文件上传到我的远程位置。

在servlet中,我可以从请求中获取fileName和文件的其他详细信息。 例如:

Part filePart = request.getPart("fileName");
String fileName = filePart.getSubmittedFileName();
System.out.println(fileName);
InputStream fileContent = filePart.getInputStream();

如何在REST中执行此操作。

基本上我想创建一个用户可以上传文件的端点。 像Elasticsearch批量API一样,我将在文件中提供文件及其内容。

例如:

curl -XPUT localhost:9200/_bulk --data-binary @data.log

在我的REST API中,我将如何获取要上传到服务器的文件的内容和元数据。

1 个答案:

答案 0 :(得分:2)

您可以使用@FormDataParam注释将multipart/form-data请求实体主体的命名主体部分绑定到资源方法参数,如下所示:

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(@FormDataParam("file") InputStream inputStream,
                       @FormDataParam("file") FormDataContentDisposition fileMetaData) {
    ...
}

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

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.23.1</version>
</dependency>

如果您没有使用Maven,请确保在类路径上具有所有必需的依赖项(请参阅jersey-media-multipart)。不要忘记在MultiPartFeature / Application子类中注册ResourceConfig

有关详细信息,请查看Jersey documentation about multipart requests