我无法弄清楚如何让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”来获取列表的上传文件列表。然后,它可以作为BodyPartEntity访问每个文件。
我很难弄清楚如何让Jersey客户端上传代码,以便文件与控件名称“files”相关联。我想编写客户端代码以这种方式上传到服务器(服务器代码正常工作之前的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对象)包含在名为“files”的控件下(就像我的服务器代码所期望的那样,就像顶部的HTML一样)。
我可以使用上述客户端代码上传文件,但无法找到将它们与“文件”控件相关联的方法。这有意义吗?
任何帮助将不胜感激。 -Andrew
答案 0 :(得分:0)
似乎没有对此的支持:
请参阅“TODO考虑支持嵌套多部分/混合正文部分的用例以包含多个上传文件。”