2017-09-12 18 views
3

から私はFileオブジェクトを提供するのではなくFileDateBodyPartを作成するための他の方法がない推測:ジャージーRESTクライアント - マルチパートの作成 - ではないFileオブジェクト

public FileDataBodyPart(String name, File fileEntity) 

しかし、私の場合は私が持っているもの] [バイトであります私はそれをファイルに変換してファイルシステムに保存したくありません。

他のクライアントライブラリを使用して、最悪の場合、バイト、入力ストリームの配列からマルチパートを(ファイルをアップロードしながら)生成する他の方法はありますか?

UPDATE:ここ は、作業コードは(私はファイルの代わりに[]バイトを使用する)である:

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(); 
+0

質問は不明です。もう少しコードを表示してください。あなたの意図は何ですか? –

+0

質問が更新されました。 – Mark

答えて

2

ファイルを受け入れないようにFileDataBodyPartための他の方法はありません。 JVMが終了したら

問題を回避するには、一時ファイルを作成し、それを削除する場合があります

byte[] bytes = {1, 2, 3}; 

File tempFile = File.createTempFile("filename", null); 
tempFile.deleteOnExit(); 

FileOutputStream fos = new FileOutputStream(tempFile); 
fos.write(bytes); 
fos.close(); 

FileDataBodyPart filePart = new FileDataBodyPart("attachment", tempFile); 
+0

はい、これはオプションになる可能性があります。ありがとう。 – Mark

2

FileDataBodyPartだけの便利なクラスです。ボディパーツの作成に使用できる唯一のタイプではありません。 FormDataMultuPart.bodyPart()のドキュメントを見ると、それは引数としてBodyPartが必要であることがわかります。 Javadocsをチェックしてください(直接のリンクは見つかりません)。 BodyPartを探して階層をトラバースする場合は、FormDataBodyPart(最も一般的)とStreamDataBodyPartのように、BodyPartからいくつかのクラスがあります。あなたはどちらかを使うことができます。

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ヘッダを持っている必要があり、そのサーバが適切に処理することができます使用することができます。 FileDataBodyPartStreamDataBodyPartは、内部でFormDataContentDispositionの作成を処理するため、という便利な意味があります。クラスです。

+0

それは私の選択です。ありがとうございました。 – Mark

関連する問題