2016-10-11 13 views
0

Java Jersey Client(https://jersey.java.net/documentation/latest/client.html)コードを実行する方法を理解しようとしています。私は、複数のファイルをアップロードする機能を持つアプリケーションを持っています。次のHTMLを参照してください。Java Jersey Clientは、名前付きコントロールに関連付けられた複数のファイルをアップロードします。

<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>

注:任意のアップロードしたファイルは、入力されたコントロール名 "ファイル" に関連するであろう。

Serverのコードは次の処理を行います。

@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入力コントロール名 "ファイル"を使用して、アップロードされたファイルのリストを取得します。その後、各ファイルにBodyPartEntityとしてアクセスできます。

Jerseyクライアントにコードをアップロードして、ファイルがコントロール名「ファイル」に関連付けられるようにする方法がわかりません。私は、サーバーコードをうまく動作させる前に、HTMLコードをサーバーにアップロードするクライアントコードを記述したいと思います.Jerseyクライアントコードでは、アップロードのためのデータをまったく同じ方法で送信しますが、

アップロードするファイルごとにFileDataBodyPartを作成するコードを一緒にスローすることができます。しかし、私は、「ファイル」という名前のコントロールに関連付ける方法がわからない:

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が生成します)。

私は上記のようなクライアントコードを使用してファイルをアップロードできますが、「ファイル」コントロールに関連付ける方法を見つけることはできません。これは理にかなっていますか?

ご協力いただければ幸いです。 -Andrew

答えて

関連する問題