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