[Cloudflare-R2][hugo] Cloudflare R2 worker for Hugo Shortcode
前言
最近發現 cloudflare r2 的可玩性,就想說來調整一下過去撰寫 hugo 文章時,關於 image 的嵌入方式。
廢話不多說,直接來吧!
實作
- hugo shortcode -> cloudflare worker -> r2
Cloudflare Worker
- 記得 worker 要先去設定變數裡頭做 r2 binding
-
export default {
async fetch(request, env) {
const url = new URL(request.url);
const objectName = url.pathname.substring(1);
// 從 R2 獲取圖片
let object = await env.R2_BLOG_IMG.get(objectName);
if (object === null) {
return new Response("Image not found", { status: 404 });
}
// 設定 Cache-Control
const headers = new Headers();
object.writeHttpMetadata(headers);
headers.set('Cache-Control', 'public, max-age=31536000'); // 快取一年
return new Response(object.body, {
headers: headers,
});
},
};
Hugo Shortcode
- 在你的 hugo 專案目錄裡頭創建 layouts/shortcodes/r2image.html
{{ $imageKey := .Get "key" }}
{{ $altText := .Get "alt" }}
<img src="https://your-worker-url.workers.dev/{{ $imageKey }}" alt="{{ $altText }}" loading="lazy">
使用
接下來使用上只要在文章裡頭加上 shortcode 呼叫就可以快速遷入圖片了
{{< r2image key="cyber-pikachu.png" alt="我是誰" >}}
output:
![皮卡丘](https://static-img.blog.taiwan-no1.net/cyber-pikachu.png)
總結
- 因為中間有多串 worker ,接下來要進一步優化調整影像大小或是裁切的功能都有機會。
- 不用再像過去把 image 塞進 hugo repo 裡頭的 static 目錄底下了,而且 cloudflare 的 dashboard 也可以直接上傳圖片或資料夾,整理起來方便一些。
- 免費的用起來就是香!