2016-03-24 14 views
1

私はAPIを開発しました。エンドポイントの1つはレポートジェネレータです。通常、レポートの名前とその他の変数を送信し、Laravel-Snappyを使用してPDFをポップアウトします。Laravel 5.2 - JSONレスポンスの一部としてPDFを返す方法

私もJWT-Authを認証に使用しています。私はHIPAAに準拠する必要があるので、私は毎回の呼び出しでトークンをリフレッシュします。ほとんどのエンドポイントでは、これを私のjsonレスポンスのメタに追加するだけで簡単です。

しかし、報告書では、強制的にダウンロードするなどのヘッダー付きのPDFしか返されません。このAPIを使用するアプリケーションが使用できるJSON応答の一部としてPDFデータを送信する方法はありますか?多分それをjsonの応答で送ることができる何らかの方法でそれを暗号化する必要がありますか?どのような考え方でも他のアイデアは歓迎されます。

+1

'file_get_content'を使って、jsonの一部としてコンテンツを送信しようとしましたか? – xAoc

答えて

2

これを個人的に行う必要はありませんでしたが、APIで見たことはファイルの内容を読み込み、base64エンコードしてjsonレスポンスで提供することです。コード

$pdf = base64_encode(file_get_contents('path/to/my.pdf')); 

return response()->json([ 
    'pdf' => $pdf, 
]); 

クイックビットユーザは、次いで、これを消費することができます。

$pdf = base64_decode($json->pdf); 

file_put_contents('path/to/save/my.pdf', $pdf); 

その後、通常通り読み/保存したファイルを開くことができます。

+0

よろしくお願いいたします。私はこれを試してみると、それがうまくいくなら答えとしてマークします –

+0

私はこれを行動に移して動作させます。私は、jsonレスポンスからデータを使用するために、angularjsの側でいくつかのことを調整しなければならなかったが、時間がかかりませんでした。合計0.3秒が応答時間に追加されました –

1

JSONレスポンスの一部として大きなバイナリデータを送信するのが最善の方法ではないと思います。私はむしろuuidまたはもっと意味のあるidを持つPDFファイル用の一時的なGET URIを作成し、それを実際のJSONレスポンスに提示したいと思います。 APIコンシューマは、応答を読み込んでファイルをダウンロードできます。

+0

これを考慮しましたが、SaaS環境にあり、HIPAAに準拠している必要があります。つまり、数秒間しかファイルを利用できない場合でも、チェックが可能です正しい人物/クライアントがこの一時ファイルにアクセスしていることを確認するには、より多くの頭痛があります。その後、Jsonレスポンスにバイナリデータを追加する余分な秒数が作成されます。 –

+0

あなたは推測できないファイルのアクセスURLにランダムな文字列を生成し、そのURLにAPI応答を与えることができます。そうすれば、ファイルは外部にアクセスできなくなります。 –

+0

正直なところ、あまりにも数秒を避けるために動作します。それは良いアイデアです、ちょうど私が探しているものではありません。 –