Java 使用Jersey客户端上传文件的最佳方法是什么?

Java 使用Jersey客户端上传文件的最佳方法是什么?,java,file-upload,jersey,jax-rs,multipartform-data,Java,File Upload,Jersey,Jax Rs,Multipartform Data,我想上传一个文件(一个特定的zip文件)到一个支持Jersey的REST服务器 基本上有两种方法(我的意思是使用Jersey客户端,否则可以使用纯servlet API或各种HTTP客户端)来实现这一点: (一) (二) 为了完整起见,这里是服务器部分: @POST @Path("/import") @Consumes({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_OCTET_STREAM}) public v

我想上传一个文件(一个特定的zip文件)到一个支持Jersey的REST服务器

基本上有两种方法(我的意思是使用Jersey客户端,否则可以使用纯servlet API或各种HTTP客户端)来实现这一点:

(一)

(二)

为了完整起见,这里是服务器部分:

@POST
    @Path("/import")
    @Consumes({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_OCTET_STREAM})
    public void uploadFile(File theFile) throws PlatformManagerException, IOException {
        ...
    }
所以我想知道这两个客户之间的区别是什么?
使用哪一种?为什么?
使用1)方法的缺点(对我来说)是它增加了对jersey-multipart.jar的依赖性(它还增加了对mimepull.jar的依赖性),所以如果纯jersey客户端方法2)同样有效,我为什么要在我的类路径中使用这两个jar呢。

也许一个普遍的问题是,是否有更好的方法来实现客户端和服务器端的ZIP文件上载…

方法1允许您使用多部分功能,例如,同时上载多个文件,或在帖子中添加额外的表单

在这种情况下,您可以将服务器端签名更改为:

@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadMultipart(FormDataMultiPart multiPart) throws IOException {
}
我还发现我必须在我的测试客户机中注册MultiPartFeature

public FileUploadUnitTest extends JerseyTest {
@Before
    public void before() {
        // to support file upload as a test client
        client().register(MultiPartFeature.class); 
    }
}
和服务器

public class Application extends ResourceConfig {
    public Application() {
        register(MultiPartFeature.class);
    }
}

谢谢你的提问,它帮助我编写了jersey文件单元测试

你找到问题的答案了吗?我也有类似的情况。
public FileUploadUnitTest extends JerseyTest {
@Before
    public void before() {
        // to support file upload as a test client
        client().register(MultiPartFeature.class); 
    }
}
public class Application extends ResourceConfig {
    public Application() {
        register(MultiPartFeature.class);
    }
}