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会产生)。
我可以像上面那样使用客户端代码上传文件,但无法找到将它们与“文件”控件相关联的方法。这有意义吗?
如有任何帮助,我们将不胜感激。
-安德鲁
似乎没有对此的支持:
见"TODO Consider supporting the use case of a nested multipart/mixed body part to contain multiple uploaded files."
我无法弄清楚如何获取 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会产生)。
我可以像上面那样使用客户端代码上传文件,但无法找到将它们与“文件”控件相关联的方法。这有意义吗?
如有任何帮助,我们将不胜感激。 -安德鲁
似乎没有对此的支持:
见"TODO Consider supporting the use case of a nested multipart/mixed body part to contain multiple uploaded files."