上傳圖片與設定封面
封面圖只接受本平台的圖片網址。外站網址與別家商店的圖片回 422 cover_image_not_owned。
上傳並設為封面
- 用
POST /v1/media/images上傳檔案,內容型別multipart/form-data,欄位名file。 - 從回應取出
url。 - 把
url原樣填進建立或更新文章的cover_image_url。 - 讀回文章,
cover_image.url是同一個值,cover_image.path是站內相對路徑。
上傳需要 write_media 權限範圍,設封面需要 write_blog。
import { readFile } from "node:fs/promises";
const baseUrl = "https://api.sfec.cloud";
const auth = { Authorization: `Bearer ${process.env.SFAPP_KEY}` };
const form = new FormData();
form.append("file", new Blob([await readFile("cover.jpg")]), "cover.jpg");
const image = await fetch(`${baseUrl}/v1/media/images`, {
method: "POST",
headers: auth,
body: form,
}).then((response) => response.json());
await fetch(`${baseUrl}/v1/blog/posts/1001`, {
method: "PATCH",
headers: { ...auth, "Content-Type": "application/json" },
body: JSON.stringify({ cover_image_url: image.url }),
});
const post = await fetch(`${baseUrl}/v1/blog/posts/1001`, { headers: auth }).then(
(response) => response.json(),
);
console.log(post.cover_image);讀出處理後的結果
刪除圖片
DELETE /v1/media/images/{id},id 是上傳回應的 id(img_ 開頭)。成功回 204。
刪除前先用 PATCH /v1/blog/posts/{id} 換掉封面或移除內文引用。仍被引用時回 409 image_in_use,處理方式見 圖片。
curl -sS -X DELETE https://api.sfec.cloud/v1/media/images/img_57 \
-H "Authorization: Bearer $SFAPP_KEY" \
-o /dev/null -w '%{http_code}\n'檢查功能開關
先讀 GET /v1/me 的 features,再決定是否呼叫。
| 開關 | 為 false 時 |
|---|---|
features.media_upload |
上傳與刪除端點回 404 feature_unavailable |
features.cover_image |
帶 cover_image_url 回 422 validation_failed,讀回的 cover_image 兩個欄位固定為 null |