gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:19:55 26 4
gpt4 key购买 nike

我想上传一个文件(具体来说是一个 zip 文件)到 Jersey 支持的 REST 服务器。

基本上有两种方法(我的意思是使用 Jersey 客户端,否则可以使用纯 servlet API 或各种 HTTP 客户端)来执行此操作:

1)

 WebResource webResource = resource();
final File fileToUpload = new File("D:/temp.zip");

final FormDataMultiPart multiPart = new FormDataMultiPart();
if (fileToUpload != null) {
multiPart.bodyPart(new FileDataBodyPart("file", fileToUpload, MediaType.valueOf("application/zip")));
}

final ClientResponse clientResp = webResource.type(MediaType.MULTIPART_FORM_DATA_TYPE).post(
ClientResponse.class, multiPart);
System.out.println("Response: " + clientResp.getClientResponseStatus());

2)

File fileName = new File("D:/temp.zip");
InputStream fileInStream = new FileInputStream(fileName);
String sContentDisposition = "attachment; filename=\"" + fileName.getName() + "\"";
ClientResponse response = resource().type(MediaType.APPLICATION_OCTET_STREAM)
.header("Content-Disposition", sContentDisposition).post(ClientResponse.class, fileInStream);
System.out.println("Response: " + response.getClientResponseStatus());

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

@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 Client 方法 2)有效,我为什么要在我的类路径中使用这两个 jar一样好。
也许一个普遍的问题是是否有更好的方法来实现客户端和服务器端的 ZIP 文件上传...

最佳答案

方法 1 允许您使用多部分功能,例如,同时上传多个文件,或向 POST 添加额外的表单。

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

@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 文件单元测试!

关于java - 使用 Jersey 客户端上传文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com