我里面有 Amazon AWS S3 存盤桶和影像。我的存盤桶中的每個物件都有自己的鏈接。當我打開它時,瀏覽器要求我下載影像。所以,它是一個下載鏈接,而不是直接在互聯網上的圖片鏈接。當然,當我把它放在<img src="https://">它不起作用。
所以我的問題是如何在我的客戶端上顯示來自 S3 的影像,這樣我就不會被迫下載影像,而不僅僅是在網站上觀看它們。
我的堆疊:Nest.js 和 React.js (TypeScript)
我如何上傳圖片:
一項服務:
const svgBuffer = Buffer.from(svgString, 'utf-8');
mainRes = await uploadFile(currency, svgBuffer);
我從以下位置獲得了 uploadFile 函式的另一項服務:
uploadFile = (currency: string, svg: Buffer) => {
const uploadParams = {
Bucket: this.config.S3_BUCKET_NAME,
Body: svg,
Key: `${currency}-chart`,
};
return this.s3.upload(uploadParams).promise();
};
我應該如何獲取我的影像:
<img src=`https://${s3bucketPath}/${imagePath}`>
uj5u.com熱心網友回復:
這可能是物件元資料的問題。檢查元資料并驗證內容型別。例如對于 PNG 影像應該是:
Content-Type='image/png'
如果物件的 Content-Type 是“binary/octet-stream”,那么它將下載而不是顯示。
通過JavaScript SDK上傳時添加相應引數:
const uploadParams = {
Bucket: this.config.S3_BUCKET_NAME,
Body: svg,
Key: `${currency}-chart`,
ContentType: 'image/png',
};
uj5u.com熱心網友回復:
上傳影像后,您有多種選擇可以獲取它們,而無需將它們下載到您的應用程式中。
最簡單但不是最好的方法是直接從 S3 Bucket 獲取它們。
假設我們有bucket: bucket-test,可以直接在瀏覽器中獲取URL:

但是你的物件必須是公共的,這是不安全的。此外,它將以轉移的形式產生額外的成本。
下一個選項是設定 CloudFront,它將為您的
然后您正在創建指向 S3 物件的 CloudFront
一些優點
- 您的存盤桶物件可能是私有的。
- 這也更快,因為影像快取在 AWS Cloudfront 邊緣。
- 您還可以為 Cloudfront 分配設定備用名稱并隱藏物件。
您的流量如下所示:
當影像未快取時
用戶 <-> Cloudfront Edge <-> S3
當影像被快取時:
用戶 <-> Cloudfront Edge
以下是設定 CDN 的方法:https : //aws.amazon.com/cloudfront/getting-started/S3/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/388698.html
