2017-12-04 11 views
1

私はWebプロジェクトで作業しています。私はSpring BootとAngular 2を使います。私はCSVファイルを作成し、このファイルをサーバからクライアントPCにダウンロードしたいと思います。 Apache Poiを使ってCSVファイルを作成します。 「CSVをエクスポート」ボタンをクリックすると、フロントエンドからバックエンドにサービス経由で渡すことができ、CSVファイルをサーバ上に正常に作成できます。ここではサービスコードは次のとおりです。作成したCSVファイルをブラウザがダウンロードしない

exportCSVFileTest(parameter: string): Observable<any> { 
    return this.httpService.post(super.getAddrApi() + parameter , null) 
     .catch(err => { 
      if (!err.status) { 
       err = { 
        status: Observable.throw(401) 
       }; 
      } 
      return Observable.throw(err); 
     }); 
} 

私はこのサービスを使用した後、私は、サーバー上のCSVファイルを作成し、私は、サーバーからクライアントのPC上でこのファイルをダウンロードしよう:そのIドン後

response.setContentType("application/octet-stream"); 
     response.setHeader("Content-Disposition", 
       "attachment;filename=" + file.getName()); 
     FileInputStream is = new FileInputStream(file); 
     ServletOutputStream out = response.getOutputStream(); 
     byte[] outputByte = new byte[4096]; 
     while(is.read(outputByte, 0, 4096) != -1) 
     { 
      out.write(outputByte, 0, 4096); 
     } 

     is.close(); 
     out.flush(); 
     out.close(); 

」何かエラーが発生します。すべてがうまくいくように見えますが、ファイルのアップロードプロセスに表示されるウィンドウは表示されません。さまざまな方法を試しました。たとえば、コンテンツタイプをapplication/csvまたはtext/csvに設定しました。そして、私は 'OutputStream'、 'response.getWriter().write()'を試してみましたが、何が間違っていますか?

+0

答えとして受け入れられるようにしてください – Carlos

答えて

0

、私はこれを行うには、2つの方法を知っているあなたはそれがダウンロードされ、ブラウザに指示する必要があり、ファイルをダウンロードするには、次の

1 - HTML

<a [routerLink]="['url/to/download/the/file']">Download CSV</a> 
内のリンクを使用してファイルをダウンロードします

2 - あなたのサービスを使用してファイルを取得し、saveAsライブラリ

import {saveAs} from 'file-saver'; 

this.service.exportCSVFileTest('parameter').subscribe(response => { 
    const filename = 'name of the file.csv'; 
    saveAs(response.blob(), filename); 
}) 
でダウンロード3210

このヘルプが必要です。

+0

それは動作します。ありがとうございました。 –

関連する問題