Java Jersey 客户端上传多个与命名控件关联的文件

Java Jersey Client upload multiple files associated with named control

我无法弄清楚如何获取 Java Jersey Client (https://jersey.java.net/documentation/latest/client.html) 代码来执行某些操作。我有一个能够上传多个文件的应用程序。见下文HTML.

<form action="http://localhost:8080/app/rest/files/uploadMultipleFiles" method="post"
                                               enctype="multipart/form-data">  
 <p>  
   Select a file to Upload to server: 
   <input type="file" name="files" size="60" multiple=“multiple”/>  
 </p>  
 <input type="submit" value="Upload File" />  
</form>  

注意:任何上传的文件都将与输入控件名称关联 "files"。

服务器代码执行以下操作:

@Path("/uploadMultipleFiles")
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFiles(final FormDataMultiPart multiPart)
{ 
  //Get contents of control named “files”
    List<FormDataBodyPart> bodyParts = multiPart.getFields("files");
    /* Save multiple files */
    if (bodyParts != null)
    {

        for (int i = 0; i < bodyParts.size(); i++)
        {

            BodyPartEntity bodyPartEntity = (BodyPartEntity) bodyParts.get(i).getEntity();
            String fileName = bodyParts.get(i).getContentDisposition().getFileName();
            try
            {
                String path = temporaryUploadDirectory + File.separator + fileName;
                long size = saveFile(bodyPartEntity.getInputStream(), path);

…… 它使用HTML输入控件名称“files”来获取上传文件列表List。然后它可以将每个文件作为 BodyPartEntity 进行访问。

我很难弄清楚如何让 Jersey 客户端上传代码,以便文件与控件名称“文件”相关联。我想编写客户端代码以这种方式上传到服务器(服务器代码工作正常之前的 HTML 片段。我希望 Jersey 客户端代码以完全相同的方式发送数据以进行上传,但无法弄清楚如何).

我可以拼凑代码来为每个要上传的文件创建 FileDataBodyPart。但我不知道如何将它们与名为 "files":

的控件相关联
List<FileDataBodyPart> bodyParts = new ArrayList<FileDataBodyPart>();
//get files to upload from file system
File dir = new File(classLoader.getResource("uploadTestDirectory").getFile());
if (dir.exists())
{
    File[] files = dir.listFiles();
    int count = 0;
    forFile f : files)
    {
       //Create a FileDataBodyPart for each file from uploadTestDirectory. Add to a list 
       bodyParts.add(new FileDataBodyPart("file" 
                       + count, new File(f.getAbsolutePath()),
                        MediaType.APPLICATION_OCTET_STREAM_TYPE));
       count++;        
    }

    WebTarget webTarget = client.target("http://localhost:8080/app/rest").path("files")
                                     .path("uploadMultipleFiles");

    //FOLLOWING IS THE FormDataMultiPart to upload
    FormDataMultiPart multiPart = new FormDataMultiPart();
    multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE);

    //add the file body parts
    for (FileDataBodyPart bp : bodyParts)
    {
        multiPart.bodyPart(bp);
    }

    Response clientResponse =
            webTarget.request(MediaType.APPLICATION_JSON).post(
                 Entity.entity(multiPart, multiPart.getMediaType()));
}

我的问题:如何修改上面的代码,以便将文件(FileDataBodyPart 对象)包含在名为“文件”的控件下(如我的服务器代码所期望的那样,如顶部的 HTML会产生)。

我可以像上面那样使用客户端代码上传文件,但无法找到将它们与“文件”控件相关联的方法。这有意义吗?

如有任何帮助,我们将不胜感激。 -安德鲁

似乎没有对此的支持:

https://jersey.java.net/apidocs/2.6/jersey/org/glassfish/jersey/media/multipart/FormDataMultiPart.html

见"TODO Consider supporting the use case of a nested multipart/mixed body part to contain multiple uploaded files."