我想写一个允许我上传文件的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中,我将如何获取要上传到服务器的文件的内容和元数据。
答案 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
。