2016-08-23 6 views
0

Javaバックグラウンドで角度2を使用しています。それらの間の通信はREST経由です。私がしなければならないことは、ボタンをクリックしてExcelファイルを作成し、そのファイルをユーザーAPIに戻すことです。rest2経由でangular2のディスクからexcelファイルを取得する方法

RESTは、次のようになります。角度で @RequestMapping(value = "/some_path/{someId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public FileSystemResource exportSomeData(@PathVariable long someId, HttpServletResponse response) { // ... create excel file data... File file = new File(fileName); response.addHeader("FILE_NAME", fileName); FileNameResource fsr = new FileNameResource(file); return fsr; }

(RESTの復帰、コールはOK作品): getFile(path:String) { this.autthHttp.get(`some_path') .map((response) => { let blob = (response)['body']; return { data: new Blob([blob], {type: 'application/octet-stream'}), filename: response.headers.get('FILE_NAME') } }) .subscribe(res => saveAs(res.data, res.filename)) }

問題は、それがデータを含んでいる、私はファイルを持っていることですが、それが失われましたそれはメタデータです(フォーマットではなく、疑問符文字をセル内でうまく表示できます)。誰かが何が問題になるかも知っていますか?

+0

RC5 Iにおいて 'せBLOB =(応答)[ '_本体']を変更しようとしました。 'せBLOB = response.blob()' と 'データと' ' と'データ:新しいブロブ([BLOB]、{ 'アプリケーション/オクテットストリーム' タイプ}):blob' しかしそれから私は例外があります_リクエストボディBLOBまたは配列バッファではありません。 – Stojan

答えて

8

はRC5ブロブ応答タイプをBLOBおよび使用するresponseTypeを設定してみてください:

getFile(path:String) { 
this.autthHttp.get(`some_path', {responseType: ResponseContentType.Blob}) 
    .map((response) => { 
     let blob = response.blob(); 
     return { 
      data: new Blob([blob], {type: 'application/octet-stream'}), 
      filename: response.headers.get('FILE_NAME') 
     } 
    }) 
    .subscribe(res => saveAs(res.data, res.filename)) 

}

+0

ありがとうございます。私は '{responseType:ResponseContentType.Blob}'の一部を欠いています。今それは動作します。 – Stojan

関連する問題