菜单

相册与分享

相关源文件

本文档详细介绍了 Immich 的相册系统和分享功能。它涵盖了资产如何组织到相册中、与他人分享内容的方法,以及通过链接进行的公开分享。有关资产管理的信息,请参阅 资产管理

相册系统概述

Immich 中的相册提供了一种组织和分组资产(照片和视频)的方式。它们支持个人整理和与其他用户的协作分享。

相册数据结构

相册由 AlbumResponseDto 对象表示,具有以下关键属性:

属性类型描述
id字符串相册的唯一标识符
albumName字符串相册的显示名称
description字符串可选的相册描述
assetCount数字相册中的资产数量
albumThumbnailAssetId字符串用作相册封面的资产 ID
ownerId字符串相册所有者的用户 ID
isActivityEnabled布尔值是否启用评论/点赞
orderAssetOrder相册资产的排序顺序
albumUsersAlbumUserDto[]拥有相册访问权限的用户
shared布尔值相册是否已分享给他人
hasSharedLink布尔值是否存在公开分享链接

来源:web/src/lib/components/album-page/album-viewer.svelte29-33 web/src/lib/components/asset-viewer/detail-panel.svelte52-56

相册操作

相册支持以下核心操作:

  • 创建相册:创建新的相册,可包含也可不包含资产
  • 添加资产:将现有资产添加到相册
  • 移除资产:从相册中移除资产
  • 设置缩略图:选择一个资产作为相册封面
  • 分享/取消分享:将相册分享给其他用户
  • 创建分享链接:生成相册的公开链接

相册架构

来源:web/src/lib/components/album-page/album-viewer.svelte web/src/lib/utils/asset-utils.ts41-143

相册分享机制

Immich 支持两种不同的内容分享方法:

  1. 用户分享:将相册分享给其他 Immich 用户
  2. 公开分享:创建可公开访问的分享链接

用户分享(协作相册)

当相册分享给其他用户时,这些用户会成为具有特定权限的“相册用户”。这使得协作相册成为可能,允许多个用户贡献和互动。

用户角色与权限

相册用户可以拥有不同的角色,控制他们可以执行的操作:

角色描述可查看可添加/移除资产可修改相册可添加/移除用户
所有者相册的创建者
管理员拥有广泛权限的管理员
编辑器可添加/移除资产
查看者只读访问权限

角色定义在 AlbumUserRole 枚举中。

来源:web/src/lib/components/album-page/album-options.svelte8-14 web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte:59-80

分享流程

来源:web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte:296-311

分享链接允许任何人通过链接访问内容,即使他们没有 Immich 账户。

属性描述
id分享链接的唯一标识符
key公开访问密钥(用于 URL)
description可选描述
allowDownload是否允许下载
allowUpload接收者是否可以上传资产
showMetadata是否显示资产元数据
assets(资源)包含在分享链接中的资产
album正在分享的相册(如果分享的是相册)
expiresAt可选的过期日期
password可选的密码保护

来源:web/src/lib/components/share-page/individual-shared-viewer.svelte31-37 web/src/routes/(user)/share/[key]/[[photos=photos]]/[[assetId=id]]/+page.svelte:26-28

来源:web/src/routes/(user)/share/[key]/[[photos=photos]]/[[assetId=id]]/+page.svelte:29-52

相册活动功能

相册可以启用活动功能,允许用户通过评论和点赞与内容互动。

活动类型

支持两种主要活动类型:

  1. 评论:对资产或相册发表文字评论
  2. 点赞:对资产或相册“点赞”

活动实现

来源:web/src/lib/components/asset-viewer/asset-viewer.svelte124-184 web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte:152-199

用户界面组件

相册和分享功能通过一系列协同工作的用户界面组件实现。

关键组件

组件目的核心功能
AlbumViewer查看相册的主要界面显示相册资产和信息
AlbumTitle显示并允许编辑相册名称编辑相册名称
AlbumDescription显示并允许编辑相册描述编辑相册描述
AlbumSummary显示相册元数据显示资产数量、日期范围
AssetGrid显示相册中资产的网格浏览、选择和查看资产
ActivityViewer显示和管理评论及点赞添加/移除评论和点赞
ShareInfoModal分享设置界面配置分享选项
UserSelectionModal选择要分享的用户选择用户并设置权限

来源:web/src/lib/components/album-page/album-viewer.svelte2-46 web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte:1-47

组件关系

来源:web/src/lib/components/asset-viewer/asset-viewer.svelte38-69 web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte:29-167

相册中的资产互动

相册中的资产可以通过多种方式进行互动:

查看资产

当在相册中选择一个资产时,它会在 AssetViewer 组件中打开,该组件提供多项功能:

  • 全屏查看照片和视频
  • 在详情面板中显示资产信息
  • 资产间的导航
  • 评论和点赞(如果启用了活动功能)
  • 其他操作(下载、分享等)

来源:web/src/lib/components/asset-viewer/asset-viewer.svelte91-188 web/src/lib/components/asset-viewer/detail-panel.svelte58-92

相册导航与资产选择

AssetGrid 组件提供了在相册中浏览和选择资产的主要界面。

  • 资产缩略图的网格布局
  • 资产按日期分组
  • 多选功能
  • 对选定资产执行批量操作

来源:web/src/lib/components/photos-page/asset-grid.svelte30-70 web/src/lib/components/photos-page/asset-date-group.svelte25-37

实现细节

添加资产到相册

将资产添加到相册的过程涉及以下关键功能:

  1. addAssetsToAlbum:将现有资产添加到相册
  2. addAssetsToNewAlbum:创建一个新相册并添加资产

来源:web/src/lib/utils/asset-utils.ts41-143

相册分享实现

相册分享使用以下关键功能:

  1. addUsersToAlbum:将用户添加到相册并指定角色
  2. updateAlbumUser:更新用户在相册中的角色
  3. removeUserFromAlbum:从相册中移除用户

来源:web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte:296-326

活动实现

通过以下功能管理活动(评论和点赞):

  1. createActivity:创建新的评论或点赞
  2. getActivities:检索资产或相册的活动
  3. deleteActivity:移除活动
  4. getActivityStatistics:获取评论和点赞的数量

来源:web/src/lib/components/asset-viewer/asset-viewer.svelte138-184 web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte:155-199

安全考量

相册和分享的安全性在多个层面实现:

  1. 基于角色的访问控制:相册中不同的用户角色具有不同的权限
  2. 密码保护:分享链接可以设置密码保护
  3. 过期日期:分享链接可以设置过期
  4. 细粒度权限:分享链接具有可配置的权限(下载、上传等)

用户体验流程

创建和分享相册的典型用户流程

来源:web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte:106-315, web/src/lib/components/share-page/individual-shared-viewer.svelte38-140

结论

Immich 中的相册和分享系统提供了组织资产和与他人分享的灵活方式。用户共享和公开链接共享的结合,以及活动功能实现的社交互动,共同促进了各种协作场景。