我想没有其他方法可以创建FileDateBodyPart而不是提供File对象:
public FileDataBodyPart(String name, File fileEntity)
但在我的情况下,我有一个byte [],我不想将其转换为文件并存储在文件系统上.
有没有其他方法从字节,输入流数组生成多部分(在上传文件时)…在最坏的情况下使用其他客户端库?
更新:
这是工作代码(但我想使用byte []而不是File):
FileDataBodyPart filePart = new FileDataBodyPart("attachment", new File("C:/TEMP/test.txt"));
MultiPart multipart = new FormDataMultiPart().bodyPart(filePart);
Invocation.Builder invocationBuilder = webTarget.request().accept(MediaType.APPLICATION_JSON);
Response response = invocationBuilder
.buildPost(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA))
.invoke();
解决方法:
FileDataBodyPart只是一个便利类.它不是您可以用来创建身体部位的唯一类型.如果您查看FormDataMultuPart.bodyPart()的文档,您将看到它将BodyPart作为参数.查看Javadocs(搜索它;找不到直接链接).如果您查找BodyPart并遍历层次结构,则有一些类从BodyPart扩展,如FormDataBodyPart(最通用)和StreamDataBodyPart.你也可以使用.
如果您有InputStream,最简单的方法是使用StreamDataBodyPart.看到javadoc,它有重载的构造函数.
如果你必须使用byte [],那么你可以使用更通用的FormDataBodyPart
byte[] bytes = "HelloWorld".getBytes(StandardCharsets.UTF_8);
FormDataContentDisposition fdcd = FormDataContentDisposition.name("test")
.fileName("hello.txt").build();
FormDataBodyPart bodyPart = new FormDataBodyPart(fdcd, bytes, MediaType.TEXT_PLAIN_TYPE);
MultiPart multiPart = new FormDataMultiPart().bodyPart(bodyPart);
部件应该有一个Content-Disposition标头,它提供有关该部件的一些信息,因此服务器可以正确处理它. FileDataBodyPart和StreamDataBodyPart将在内部处理FormDataContentDisposition的创建,这就是它们为便利类的原因.