首页 / Astro 教程 / 图片与视频托管服务

Astro 教程

图片与视频托管服务

本教程共 56 篇 · 第 25 篇 · 更新于 2026-08-07 · 约 9 分钟阅读

AstroAstro 教程媒体托管CloudinaryImageKitMux视频托管CDN

本节目标:搞懂什么是“媒体托管服务”,学完你知道 Astro 官方推荐的三家(Cloudinary、ImageKit、Mux)分别管图片还是视频,以及它们怎么接入。

什么是媒体托管服务

前面两章我们讲了把图片放本地、用 Astro 自己优化。但当图片、视频变多,或者需要裁剪、转格式、做 CDN 加速时,自己处理就吃力了。

媒体托管服务(hosted media service)就是专门干这行的平台:你把图片/视频存上去,它们用一套 API 帮你存、管、优化、按访问者所在地区就近分发。Astro 官方文档为此开了专门的“media”指南,并内置推荐了三家。

Note

官方文档里这一章的页面标题是 “Image and video hosting with Astro”。你按英文原名去搜时是这个,本地素材文件名是 guides/media.md

为什么要用托管服务

对图片来说,托管服务能自动转格式、压体积,并按访问者设备给最合适的版本。这些“远程图片”在 Astro 里可以照常喂给内置的 <Image /><Picture /> 组件,Markdown、MDX、UI 框架组件都能用。

对视频来说,托管的价值更大。Astro 本身没有原生视频支持——它不负责视频的转码、压缩、流式传输。文档明确建议:视频交给像 Mux 这样的专业服务,它们提供按需播放和点播/直播能力,还带可定制的播放器,可靠性和扩展性都比你自己处理本地视频强得多。

Tip

一句话总结:图片你能自己用 astro:assets 处理;视频最好别自己扛,交给托管服务。

Astro 官方推荐的三家

官方 media 指南列出了三个对接好的服务,定位各有侧重:

  • Cloudinary:图片 + 视频平台,也兼具无头数字资产管理系统(DAM,可理解为“集中管素材的仓库”),自带 CDN。
  • ImageKit:实时媒体优化与分发平台,带全球 CDN 和 DAM,按 URL 做转换。
  • Mux:专注视频,提供流媒体基础设施和播放数据分析。

选哪家,看你是“主要管图片”“图片视频都要”还是“主要管视频”。

Cloudinary:图片视频通吃

Cloudinary 既能托管图片也能托管视频,还能用它的 Transformation API 做背景移除、智能裁剪、AI 生成等花活。

Astro 有官方维护的 astro-cloudinary SDK,提供原生 Astro 组件(图片、视频、上传)和一个可配合内容集合的加载器。装包:

npm install astro-cloudinary

.env 里填上你的 Cloud Name 和密钥:

PUBLIC_CLOUDINARY_CLOUD_NAME="<你的 Cloud Name>"
PUBLIC_CLOUDINARY_API_KEY="<你的 API Key>"
CLOUDINARY_API_SECRET="<你的 API Secret>"

<CldImage> 显示图片,会用上 Cloudinary 的优化和转换能力:

---
import { CldImage } from 'astro-cloudinary';
---

<CldImage
  src="<Public ID>"
  width="<宽度>"
  height="<高度>"
  alt="<描述>"
/>

视频用 <CldVideoPlayer>,上传用 <CldUploadWidget>。若要做复杂管理(上传、列举、分析),还能用 Cloudinary 的 Node.js SDK。整体看,Cloudinary 是“图片视频都想托管”时的省心选择。

ImageKit:把 Astro 组件自动接到 CDN

ImageKit 的特点是“无缝”:它的 Astro SDK 注册了一个自定义图片服务,把 Astro 内置的 <Image /><Picture /> 以及 Markdown/MDX 图片,全都自动改走 ImageKit 处理。本地 src/ 里的图仍由 Astro 自己的 Sharp 处理,所以老项目加它不会弄坏已有图片。

装包:

npm install @imagekit/astro

.env 配置端点和密钥,再在 astro.config.mjs 登记集成:

import { defineConfig } from 'astro/config';
import imagekit from '@imagekit/astro/integration';

export default defineConfig({
  integrations: [imagekit()],
});

之后你照常写 <Image />,ImageKit 会在背后自动做格式转换、质量优化、响应式 srcset、懒加载:

---
import { Image } from 'astro:assets';
---

<Image src="/sample.jpg" width={800} height={600} alt="示例图" />

它还支持用 transformation 属性做 AI 转换(去背景、放大、生成式填充等),并提供 <Video /> 组件、<OgImage />(社交分享图)组件,以及服务器端的客户端上传令牌助手。如果你主要想给图片加一层 CDN + 自动优化,又不想改现有写法,ImageKit 很合适。

Mux:专心把视频播好

Mux 只管视频,提供流媒体基础设施和播放数据分析。它给 Astro 提供了原生组件:Mux Player(开箱即用的播放器)和 Mux Uploader(上传 UI)。

装播放器组件:

npm install @mux/mux-player-astro

只要知道视频的 playbackId(在 Mux 后台能查到),就能直接放:

---
import { MuxPlayer } from "@mux/mux-player-astro";
---

<MuxPlayer
  playbackId="DS00Spx1CV902MCtPj5WknGlR102V5HFkDe"
  metadata={{ video_title: '我的 Astro 视频' }}
/>

Mux Player 自带自适应清晰度、缩略图预览、全屏、画中画等现代播放器能力,还内置观看数据分析,视频有人看后 dashboard 里会自动出现互动和质量指标。若你不想用全套播放器,还有一个 <mux-video> web 组件,可当 HTML5 <video> 的替代品,支持 HLS 播放。

复杂点的事——比如用 Node SDK 查询视频信息、创建资产——需要 Mux 的 API 令牌(配在 .env 里)。上传则用 <MuxUploader> 组件,支持选文件、拖拽、暂停续传。

非 Astro 原生 SDK 也行

要强调:这些服务都不是“只能配合 Astro 专属组件”。它们都提供标准 SDK:

  • Cloudinary / ImageKit 各有 Node.js 和 JavaScript SDK,可以纯生成 URL 或在服务器端管理素材;
  • Mux 有 Node SDK,可在 .astro 组件脚本里调用 REST API。

这意味着即使你的项目是 SSG(纯静态)、不想引额外组件,也能用这些平台的 SDK 在构建时拉数据、拼 URL。

一定要用托管服务吗

不一定。Astro 本身就提供内置的图片存储方式(见上一章),也支持引用远程图片。小站点、图不多时,用本地 src/ + astro:assets 完全够用。

但视频是另一回事:Astro 没有原生视频能力,官方明确建议用 Mux 这类服务来扛优化和流式传输。所以“要不要托管”对图片是可选、对视频则强烈推荐。

怎么挑

给你一个粗略的决策思路:

  • 图片为主、想要 AI 转换和一站式管理 → Cloudinary 或 ImageKit。
  • 想尽量不改现有 <Image /> 写法、只加 CDN 优化 → ImageKit(注册服务、自动接管)。
  • 主要或只有视频 → Mux。
  • 图少且简单 → 不用托管,Astro 自带 astro:assets 即可。

混合搭配:本地图与托管图共存

其实不必二选一。一个真实站点常常是「大多数图走本地 astro:assets 优化,少量特殊图走托管服务」:

  • 文章配图、图标这类固定素材,放 src/,让 Sharp 在构建时压好,零额外服务、零月费。
  • 用户上传的头像、商品图这种「数量大、要实时裁剪」的,交给 Cloudinary / ImageKit,按访问动态处理。
  • 视频一律交托管(如 Mux),因为 Astro 自己不处理视频。

在代码里它们并不冲突:src/ 的图继续用 <Image /> 正常优化;托管服务的图用各自的 SDK 组件(<CldImage><MuxPlayer> 等)。ImageKit 更特别,它直接接管了 <Image /> 背后那层图片服务,所以你连写法都不用改,只是背后的处理从本地 Sharp 换成了它的 CDN。

这种「静态走本地、动态走托管」的分工,既省钱又省力,是很多中大型内容站的实际做法。

小结

本章我们明白了“媒体托管服务”的定位:Cloudinary(图+视频+AI 转换)、ImageKit(把 Astro 组件自动接到 CDN,几乎零改动)、Mux(专注视频播放与上传)。图片可自管也可托管,视频则建议托管——因为 Astro 本身不处理视频。接入方式多是通过官方 SDK 或集成,既能用原生 Astro 组件,也能用标准 Node/JS SDK。