2017-02-23 201 views
1

我有要求通过上传API上传csv文件,但很难在框架中添加支持。 我使用球衣作为工具,并使用下面的maven依赖关系进行多部分支持。如何使用Jersey(Java)通过Rest API上传csv文件?

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

请帮助一些示例代码来帮助我通过Rest API实现文件上传(csv,xlsx等)。

回答

1

要上传文件到服务器,您可以使用例如POST发送请求有效负载中的文件内容。请求的Content-Type应为multipart/form-data,并且您的资源方法必须使用@Consumes(MediaType.MULTIPART_FORM_DATA)进行注释。

在新泽西,你可以使用@FormDataParam注释到multipart/form-data请求实体主体的命名主体部分(S)绑定到资源的方法参数,如下:

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

要使用多的功能,你需要如果你不使用Maven确保有需要的所有依存关系(见jersey-media-multipart)在类路径上

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

:在jersey-media-multipart模块添加到您的pom.xml文件。

您还需要在Application/ResourceConfig子类注册MultiPartFeature

@ApplicationPath("/api") 
public class MyApplication extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> classes = new HashSet<Class<?>>(); 
     classes.add(MultiPartFeature.class); 
     return classes; 
    } 
} 
@ApplicationPath("/api") 
public class MyApplication extends ResourceConfig { 

    public MyApplication() { 
     register(MultiPartFeature.class); 
    } 
} 

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

如果您需要操纵XLS/XLSX文件,可以考虑Apache POI项目。