2017-03-13 69 views
3

我正在使用AWS API網關(APIG)和Lambda函數構建無服務器的網站。我必須使用代理集成,因爲後面的Lambda函數必須接收http請求標頭。同時,需要提供一些二進制數據。在我的情況下,favicon.ico文件。其他人可能想要爲動態創建的PDF或Excel文件提供服務。 APIG爲此目的提供二進制支持。使用base64對數據進行編碼並配置該MIME內容類型,以便在將其提供給客戶端之前將其解碼。但是,這不適用於代理集成。代理集成只是跳過集成響應部分。如何使用代理集成從AWS API網關提供二進制數據?

我試圖將favicon.ico的請求重定向到S3端點,但瀏覽器顯示奇怪的行爲。因爲ico文件來自不同的重定向域,而不是相同的域。

使用base64對其進行編碼並讓客戶端瀏覽器對其進行解碼並不是一種選擇,因爲這不是標準功能,可能無法在所有瀏覽器中使用。

我想我不能做任何事情,直到AWS爲此添加一個新功能。有沒有人看過這個問題?任何想法或建議?

回答

0

在這裏回答我自己的問題。您應該去AWS論壇獲取AWS問題。這裏不是mamy AWS用戶。

答案:使用代理集成的二進制支持能夠工作,並且適用於傳入和傳出響應。

有3個與此相關的因素:

  1. 在APIG二進制支持設置MIME類型中的傳入和傳出JSON(I設置此上控制檯)
  2. 的「isBase64Encoded」值
  3. 傳出JSON中的「Content-type」值

上面的答案意味着是的,你可以接受文件,並且是的,你可以通過代理集成來分發文件。

當用戶'發佈'與身體,如果您設置的MIME類型匹配它,APIG編碼整個身體部分base64,並指出這與「isBase64Encoded」值。傳出響應也會發生同樣的情況。如果您想要使用二進制數據進行響應,請使用base64進行編碼,並在傳出的JSON中將該值設置爲true。

對於傳入請求,它僅取決於您設置的MIME類型之一。對於傳出,這兩個條件,JSON和MIME類型中的指標都必須匹配。

爲了簡單起見,我只是將MIME類型設置爲*/*。無論何時用戶提交任何內容,讓APIG編碼然後解碼。每當我用二進制響應,我只需設置指標並以base64編碼。我不這樣做與其他類型,如測試/ HTML(不壓縮)。

+0

我想在我的一個終端中返回一個PDF,我將它編碼爲base64,並將「isBase64Encoded」設置爲true。但是,我收回的PDF看起來好像不能正確解碼。如果我在文本編輯器中打開文件,手動解碼並保存,則可以查看PDF。任何想法爲什麼發生這種情況? – JPL

+0

JPL,請檢查您的MIME設置是否支持二進制。 – gini09

+0

自從我上一條評論以來,我已經爲所有類型*/*添加了二進制支持,它可以工作,但它會弄亂非二進制類型,比如JSON。如果我輸入應用程序/ pdf或甚至應用程序/ *,API網關不會識別這些,並且不會正確處理類型。我不確定格式是否有誤或者是否有其他設置。 – JPL

相關問題