Loving Tina? us on GitHub0.0k
v.Latest
Documentation

基于仓库的媒体

在此页面上

TinaCMS 提供了内置的基于仓库(git)的媒体存储选项。或者,你可以将你的CMS连接到外部媒体存储提供商。

基于仓库的媒体将你的资产与内容放在一起,这意味着你可以跟踪代码和媒体的更改并回滚版本

这还有其他好处,比如减少对外部API的依赖,并保持本地开发和预览环境的同步。

看不到你的媒体?对于新创建的项目,初始媒体同步会自动触发,可能仍在进行中。如果你的媒体仍未出现,你可以从 TinaCloud 项目仪表板的媒体选项卡中手动触发同步。

配置

要在你的项目中配置基于仓库的媒体,请在 tina/config.{ts,js} 中的架构定义中添加以下内容:

//tina/config.{ts,js}
export default defineConfig({
// ...
media: {
tina: {
publicFolder: 'public',
mediaRoot: 'uploads',
static: false, //默认是 false
},
},
});

资产存储路径

publicFolder 设置为你网站的“public”文件夹的路径。此路径是相对于项目根目录的。

对于任何 Next.js 网站(例如我们的 tina-cloud-starter),此值应为 "public"

媒体存储路径

媒体文件夹的路径,相对于 publicFolder 的值。

如果你希望你的媒体上传到 publicFolder 的根目录,请将其设置为 ""

此目录中的任何内容都将与 TinaCloud 的媒体服务器同步,图像将公开可访问。

媒体权限

static 属性决定了媒体文件是否可以通过编辑器直接上传、编辑或删除。

  • static: true:编辑者不能上传/删除媒体(静态资产)
  • static: false(默认):编辑者可以上传/删除媒体(动态资产)。

支持的媒体类型

默认支持以下文件类型:

格式

MIME 类型

示例

Adobe InDesign

application/x-indesign

.indd

Apple HTTP Live Streaming

application/vnd.apple.mpegurl

.m3u8

二进制文件

application/octet-stream

.bin

Filmbox

model/fbx

.fbx

GL 传输格式 (JSON)

model/gltf+json

.gltf

图像

image/*

.jpg, .png, .gif 等

JSON

application/json

.json

JSON-LD

application/ld+json

.jsonld

材料交换格式

application/mxf

.mxf

Microsoft Excel (旧版)

application/vnd.ms-excel

.xls

Microsoft Excel (OpenXML)

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

.xlsx

Microsoft Word (旧版)

application/msword

.doc

Microsoft Word (OpenXML)

application/vnd.openxmlformats-officedocument.wordprocessingml.document

.docx

MPEG-DASH

application/dash+xml

.mpd

PDF

application/pdf

.pdf

多边形文件格式

model/ply

.ply

PostScript

application/postscript

.ps, .eps 等

文本文件

text/*

.txt, .md 等

U3D 网格

model/u3d+mesh

.u3d

USDZ 压缩包

model/vnd.usdz+zip

.usdz

视频

video/*

.mp4, .avi, .mkv 等

如果你想指定自己的允许文件类型,请在 media 属性中添加以下内容:

//tina/config.{ts,js}
export default defineConfig({
// ...
media: {
tina: {
//..
},
accept: ['image/jpeg', 'video/mp4'],
},
});

NextJS 图像

如果你正在使用 Next.js 图像,你需要在 next.config.js 文件中添加如下内容以允许访问外部图像。

module.exports = {
images: {
remotePatterns: [
{
protocol: 'https',
hostname: 'assets.tina.io',
port: '',
},
],
},
};

了解更多关于 Next.js 远程模式

最大文件大小

上传文件到 TinaCloud 时,最大允许文件大小为 100 MiB。

这如何与分支协作?

基于仓库的媒体设计用于单一分支工作流。如果你的项目正在使用多个分支编辑工作流,需要注意一些已知的限制。

  • 图像不能被更改。一旦上传,任何后续对资产的更改都不会反映出来。
  • 如果你只有一个启用媒体的分支,媒体存储将从该分支获取/上传图像。
  • 如果你有多个启用媒体的分支,那么所有媒体将从/上传到仓库的默认分支。
  • 媒体文件不能通过媒体管理器重命名。请参阅下面的重命名媒体文件以获取解决方法。

如果你在非默认分支上配置 Tina(且 Tina 配置尚未合并到默认分支),项目创建时的自动媒体同步可能无法找到你的媒体配置。在这种情况下,TinaCloud 项目仪表板中的媒体选项卡将显示媒体尚未同步。一旦你的 Tina 配置合并到默认分支,你可以从该选项卡手动触发同步。

重命名媒体文件

基于仓库的媒体不支持通过媒体管理器重命名文件。因为媒体只跟踪一个分支,所以没有可用于媒体操作(如重命名)的分支功能。

如果被跟踪的分支启用了分支保护规则,尝试上传文件的重命名版本将保存文件到媒体存储(S3),但更改将不会提交到受保护的分支。这导致新文件被存储但未在你的仓库中反映。

解决方法: 要重命名媒体文件,请在 GitHub 中直接执行以下步骤:

  1. 在 GitHub 上导航到你的仓库,并在媒体目录中找到媒体文件(例如 public/uploads/
  2. 直接在 GitHub 中删除旧文件
  3. 等待删除同步回 TinaCloud
  4. 直接在 GitHub 中添加新名称的文件
  5. 等待新文件同步回 TinaCloud
这个解决方法是必要的,因为直接在 GitHub 中进行的更改将同步回 TinaCloud,绕过单一分支媒体限制。
上次编辑: September 18, 2025