2016-12-14 5 views
0

画像をうまくアップロードできます。しかし、私はイメージがどのレコードに属しているかを識別できるように、イメージと共にjsonオブジェクトを送る必要があります。私は間違って何をしていますか?変数情報がサービスのJava側でnullとなるのはなぜですか?FormDataに複数のオブジェクトを追加する方法

クライアント:

let file = event.target.files[0]; 
let info = {formId:8, formVersionId:2, formIndex:0}; 
var formData = new FormData(); 
      formData.append('file', file); 
      formData.append('info', info); 
      $.ajax({ 
       url: URL.BUILDER_URL + '/megaUpload', 
       type: 'POST', 
       data : formData, 
       cache : false, 
       contentType : false, 
       processData : false, 
      }); 

サーバー:

public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream, 
           @FormDataParam("file") FormDataContentDisposition fileDetail, 
           @FormDataParam("info") GuiCreateResponse info) { 
} 
+0

コンテンツタイプは「multipart/form-data」であってはなりませんか? – gregbert

+0

multipart/form-dataに変更すると、サービスは不正なリクエストエラーで爆発します... – nikotromus

答えて

1

https://developer.mozilla.org/en-US/docs/Web/API/FormData/append

ここでは明らかに いるFormData値がいずれかの文字列またはBLOBすることができ、と述べています。

let file = event.target.files[0]; 
var formData = new FormData(); 
      formData.append('file', file); 
      formData.append('formId', '8'); 
      formData.append('formVersionId', '2'); 
      formData.append('formIndex', '0'); 

これは問題を解決するはずです。

+0

クローサー。サーバー側では、残りのメソッド "@FormDataParam(" formId ")FormDataContentDispositionフォームでこのパラメータを設定します。変数フォームに値が入力されますが、値 '8'はオブジェクト内には存在しません。 – nikotromus

+0

それを釘付け!私がサーバー側で持っていた問題は、正しいデータ型が宣言されていないものでした。私はそれをStringとして宣言する必要がありました。私はこのコードが必要でした:@FormDataParam( "formId")String form – nikotromus

+0

ありがとう、タンゴありがとう! – nikotromus

0

あなたはformIdを使用しているが、あなたはおそらく"formId"として引用符で囲むたいです。このコードを試してください。

let file = event.target.files[0]; 
let info = {"formId":8, "formVersionId":2, "formIndex":0}; //See changes here 
var formData = new FormData(); 
      formData.append('file', file); 
      formData.append('info', info); 
      $.ajax({ 
       url: URL.BUILDER_URL + '/megaUpload', 
       type: 'POST', 
       data : formData, 
       cache : false, 
       contentType : false, 
       processData : false, 
      }); 
+0

情報はもはやnullではありませんが、その値は nikotromus

+0

です。答え。 – Max

0

おそらくこれが問題です。 docsは、「append()メソッドを使用する場合、3番目のオプションのパラメータを使用して、サーバーに送信されるContent-Dispositionヘッダー内でファイル名を渡すことができます。サポートされている)、名前 "blob"が使用されます。

3番目のパラメータを指定しないので、FormDataContentDispositionが "blob"を探す必要があると考えています。サーバの注釈を変更してその名前を確認してみてください:

public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream, 
          @FormDataParam("blob") FormDataContentDisposition fileDetail, 
          @FormDataParam("info") GuiCreateResponse info) 
関連する問題