2017-10-01 1 views
0

目的:以下のURLを生成することにより、サーバからPDFファイルをダウンロードしたい: http://localhost:4200/bookStore/secured/rest/books/14119ペイロード(空のコンテンツタイプ)禁止されたエラー|残り火で、サーバーからPDFファイルをダウンロード中に

以下の行がbook.jsで実行されます際にURLが生成されますルートで。

return this.store.findRecord('book', bookId); 

しかし、403の禁止されたエラーが発生します。詳細のエラー:

Error: Ember Data Request GET /bookStore/secured/rest/books/14119 returned a 403 
Payload (Empty Content-Type) 
Forbidden 
    at new AdapterError (-private.js:3170) 
    at Class.handleResponse (rest.js:594) 
    at ajaxError (rest.js:956) 
    at Class.hash.error (rest.js:623) 
    at fire (jquery.js:3317) 
    at Object.fireWith [as rejectWith] (jquery.js:3447) 
    at done (jquery.js:9274) 
    at XMLHttpRequest.<anonymous> (jquery.js:9514) 

が、私は「アプリケーション/ PDF」などのコンテンツ・タイプを設定する必要がありますか?はいの場合は、設定方法をご提案ください。

ルート\ book.js

actions: { 
    pdfClick(bookId) { 
     return this.store.findRecord('book', bookId); 
    } 
} 

テンプレートの\ book.hbsサーバ側の

<button {{action "pdfClick" book.bookId}}>PDF</button> 

、受信及び応答コード:以下

はJSコードであります要求は次のとおりです。

@GET 
@Path("/{bookId}") 
@Produces("application/pdf") 
public Response bookExport(@PathParam("bookId") long bookId) { 
    //Code 
} 

サーバーサイドコードによると、サーバーからPDFファイルを取得しています。これはPostManを使用して正常にテストされます。

答えて

6

Ember Dataを使用してPDFファイルをダウンロードしようとしているようです。 Ember Dataは主にJSONデータを処理することを意図しているため、この場合は最適ではない可能性があります。あなたはEmber Dataを他のすべてのために引き続き使用することができますが、PDFをダウンロードするには、正しいURLを生成するためにのみ使用することをお勧めします。

あなたはおおよそ次のようにURLを生成することができるはずです:あなたがすべてで、このためエンバーのデータを使用しない場合

let url = `http://localhost:4200/bookStore/secured/rest/books/${bookId}`; 

let url = this.store.adapterFor('book').urlForFindRecord(bookId, 'book'); 

またはちょうど。

最後にあなたが使用できるPDFをダウンロードするには:

document.location.assign(url); 

たり、ボタンがリンクに変換:

<a href={{url}}>Download PDF</a> 
+0

@TBieniekにお返事ありがとうございます。 これは の 'let url = this.store.adapterFor( 'book')。urlForFindRecord(bookId、 'book');' 私は希望のURLを取得しました。しかし、hbsファイルからURLをトリガーする方法。 注: '' これはpdfClick関数が呼び出され、URLが生成される場所です。 hbs内のURLをトリガに使用する方法。 私が試した: '<ボタン{{アクション "pdfClick" book.bookId}}のonclick = {{URL}}> PDF'& '' PDF それが機能へと進むが、後にURLをトリガしません。 –

0

あなたはhttp://localhost:4200/bookStore/secured/rest/books/14119に要求を行っているが、これはエンバーの開発サーバーであります。 emberデータを使用する場合は、アダプタ内のホストをカスタマイズできます。その方法については、this section of the documentationを参照してください。

Ember DataはPDFファイルを自動的に処理する方法を知らないことに注意してください。ダウンロードしたいだけの場合は、<a href="location of pdf file"で直接リンクすることをおすすめします。

0

休憩コールへの応答としてバイナリ(pdf)を取得する必要があります。いくつかの異なるオプションがあります:

最初はTBienekの<a href={{url}}>Download PDF</a>と同じです。私はそれが単純でクロスブラウザのソリューションだと思います。これは、電話を休める必要性を排除します。 contentBlobを作成し(window.openを介して)、それを開くためにトリガその後

{ 
    content:'<base64 encoded byte arr>', 
    filename:'<string>, 
    contentType: 'application/pdf' 
} 

2つ目は、次のようなJSONオブジェクトでPDFのバイトを送信することです。

現在のサーバーのエンドポイントを変更せずにXMLHttpRequestを使用する3番目の方法もあります。 2番目のオプションでcontentというXMLHttpRequestのresponseを使用してください。

いずれもEmber Dataの使用方法はありません。

関連する問題