1

serverlessを使用してラムダ関数を作成しました。この関数は、GETリクエストでAPIゲートウェイ経由で起動され、バッファからpdfファイルを返す必要があります。私は、バッファを作成するためにhtml-pdfを使用して、次のコマンドAWSラムダPDFファイルを返す

let response = { 
    statusCode: 200, 
    headers: {'Content-type' : 'application/pdf'}, 
    body: buffer.toString('base64'), 
    isBase64Encoded : true, 
    }; 
    return callback(null, response); 

でpdfファイルを返すようにしようとしますが、ブラウザだけでPDFファイルをロードするために失敗しているので、私はPDFファイルを返すように正確にどのように知りませんよブラウザに直接ファイルを保存します。その解決策を見つけることができませんでした。

+0

Base64エンコーディングが不思議です。それは必要ですか? Maybこれは問題ですか?私はバイナリ形式でデータを返すだろう。 –

+0

私はいくつかのバリエーションを試しました(また、bas64エンコーディングなし)。提案は、次のリンクから来ています:https://github.com/serverless/serverless/issues/2797 –

答えて

3

よく、私は答えを見つけました。 私の応答オブジェクトの設定はうまくいきました。私は、これをブラウザで動作させるために、APIゲートウェイの設定を手動で変更しなければなりませんでした。私は、バイナリのサポートであなたのAPIを選択し

  • クリック
  • あなたのコンソールにはログインGATEWAY

    API Gatewayコンソールでバイナリ設定でバイナリメディアタイプに「*/*」
    1. APIが追加されましたドロップダウンに

    2. 編集バイナリメディアタイプとは "*/*"

    FRONTEND

    012追加します

    新しいタブでapi urlを開く(target = "_ blank")。おそらくブラウザはエンコードされたベース64のレスポンスを処理していると思われます。私の場合はクロムを使用しているので、ブラウザはちょうど私がしたいのと同じように新しいタブでpdfを開きます。

    +0

    を共有することができます1)正確にAPIゲートウェイで行われた変更 2)どのようにBase64エンコードされた応答文字列を処理していますか? – Shuki

    +0

    @Shukiはちょうど答えを更新しました、これもあなたのために働くことを願っています –

    +0

    @sami_analystこれは私のために働いたので、ありがたく、私はpdfをアップロードするときに 'application/pdf' –

    1

    巨大なPDFをお持ちの場合、ラムダがそれを返すのに時間がかかり、ラムダでは100msごとに請求されます。

    私はまずそれをS3に保存して、LambdaがS3 URLをクライアントにダウンロードしてダウンロードさせるようにします。

    +0

    s3へのアップロードプロセスは少なくとも時間がかかりますか?この提案をありがとうございますが、私は直接ファイルをダウンロードする必要があります –