java – Jersey REST客户端 – 多部分创建 – 不是来自File对象

我想没有其他方法可以创建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.看到j​​avadoc,它有重载的构造函数.

如果你必须使用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的创建,这就是它们为便利类的原因.

上一篇:php – CURL POST multipart / form-data


下一篇:Python App Engine上传了图像内容类型