2017-07-26 56 views
1

創建單頁的應用程序(使用角),並部署到LAMBDA + APIGateway + S3通過服務器端渲染(是搜索引擎友好和使用Express.js)。 應用程序工作的基本功能,動態渲染DOM和加載樣式和路由,但圖像(PNG,JPEG)不會加載罰款,不包括SVG文件。無法在λ+ S3加載圖像

對加載圖像的請求響應具有200個狀態碼,但圖像爲空且爲0KB。

enter image description here

我應該怎麼辦? 我試圖將*/*添加到AWS APIGateway的二進制媒體類型中,並確認存在S3存儲桶中的圖像。服務器(如Node.js的)上

+0

您是否嘗試過從S3下載這些圖像並打開它們? – dashmug

回答

0

代碼拒絕二進制文件,因此要修復它,然後它工作正常。


詳情

在第一,最重要的是設置在接受二進制的媒體類型。

我使用的無服務器架構部署該項目,但在部署時二進制媒體類型變化,所以用「無服務器-apigw二進制」 NPM包。

// serverless.yml 
... 
plugins: 
    - "serverless-apigw-binary" 
custom: 
    apigwBinary: 
    types: 
     - "*/*" 
... 

還在項目入口點設置媒體類型。

// app.js 
... 
const awsServerlessExpress = require("aws-serverless-express"); 
const binaryMimeTypes = ["image/jpeg", "image/png", ...]; 
const server = awsServerlessExpress.createServer(app, undefined, binaryMimeTypes); 

export const universal = (event, context) => { 
    awsServerlessExpress.proxy(server, event, context); 
}; 
+0

Hi @Yohsuke。我面臨着上述問題中提到的同樣的問題。我有一個從S3讀取圖像的節點api(express)。但對於lambda和api網關,我無法加載它們。那麼你能解釋你是如何解決它的? – Ananth

+0

@Ananth嗨。最重要的是在API網關控制檯上設置接受二進制媒體類型。 在我的情況下,使用無服務器框架來部署項目,同時在部署時使用「serverless-apigw-binary」npm包自動設置API網關的二進制媒體類型。 –

+0

有關詳細信息,請參閱最佳答案! –