Ente Photos 相册(Albums)功能全指南:创建、整理、共享与嵌套目录上传
2026/9/12 17:02:52 网站建设 项目流程

Ente Photos 相册(Albums)功能全指南:创建、整理、共享与嵌套目录上传

【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente

导读

本文是 Ente Photos 相册(Albums)功能的完整操作指南,覆盖从相册的创建、重命名、描述编辑、封面设置,到地图视图、排序、置顶、空相册批量清理,以及桌面端嵌套文件夹上传策略等全部核心操作。读完本文,你将掌握在移动端(Android/iOS)与 Web/桌面端分别管理相册的完整路径,并理解相册在 Ente 中的底层数据模型——相册本质上是服务端的加密集合(Collection),所有操作都会自动同步到你的全部设备。


相册是什么:与文件夹的关键区别

在 Ente Photos 中,相册是帮助你整理照片和视频的集合(collection)。它像电脑上的文件夹一样,可以把相关照片归组——但两者有几个关键差异:

相册的工作方式:

  • 相册是照片和视频的集合;
  • 每一张照片可以同时属于多个相册
  • 当一张照片被加入多个相册时,它只占用一次存储空间(不会重复计费);
  • 相册会在你的所有设备之间自动同步

与文件夹的关键区别:

  • 不支持嵌套:与文件夹不同,相册不能包含其他相册,所有相册都处于同一层级;
  • 多重归属:一张照片可以同时存在于多个相册,而不消耗额外存储;
  • 与设备独立:你在 Ente 中创建的相册,与你设备上的本地文件夹是相互独立的。

源码中的相册模型:Collection

从源码结构看,相册在移动端底层对应的是 Collection 模型。该模型记录了相册的id、拥有者owner、加密后的名称与密钥(encryptedNameencryptedKey)、类型CollectionType、参与者sharees、公开链接publicURLs以及最后更新时间updationTime等字段。

值得注意的细节是:

  • 相册名称在服务端是加密存储的(encryptedName+nameDecryptionNonce),只有拥有合法密钥的客户端才能解密显示,这与 Ente 端到端加密的定位一致;
  • 源码注释中说明,公开上线前的旧账号可能只有明文名称,因此客户端通过decryptedName字段回退到旧名称;
  • 相册类型由枚举CollectionType { folder, favorites, uncategorized, album, unknown }定义(见 collection.dart),其中album即用户手动创建的普通相册。

创建新相册

创建相册是组织照片和视频的第一步,移动端与 Web/桌面端的入口略有不同。

移动端

  1. 打开底部的Albums(相册)标签页;
  2. 点击Add new(新建)按钮;
  3. 输入相册名称;
  4. 点击Create(创建)

Web / 桌面端

  1. 点击右上角的All Albums(所有相册)按钮(下拉箭头);
  2. 点击New album(新建相册)按钮;
  3. 输入相册名称;
  4. 点击Create(创建)或直接按回车。

Web 端的实现位于 AllAlbums.tsx:创建动作通过createAlbum(albumName)(隐藏区则为createHiddenAlbum(albumName))发起,成功后会触发远程同步(onRemotePull)并弹出"相册已创建"的提示条。对话框中还内置了搜索框——当你输入的名称包含 "New album" 字样时,创建按钮依然会展示,方便边搜边建。

除了手动创建,你还可以通过以下方式产生相册:

  • 从设备上传照片时自动创建;
  • 手动把照片加入新相册;
  • 在桌面端通过 watch folders(监视文件夹) 功能自动创建。

重命名相册

给相册一个有意义的名称,能让你的资料库更便于检索。

移动端

  1. 打开相册;
  2. 点击右上角的溢出菜单(三个点);
  3. 点击Rename album(重命名相册),输入新名称;
  4. 点击Rename(重命名)

Web / 桌面端

  1. 打开相册;
  2. 点击右上角的溢出菜单(三个点);
  3. 点击Edit details(编辑详情)
  4. 输入新名称;
  5. 点击Save(保存)

从源码看,Collection模型通过setName()同步维护旧字段name与新字段decryptedName,以保证旧账号迁移期间的兼容性(见 collection.dart)。


添加或编辑相册描述

你可以为相册添加一段描述文字,为照片提供上下文。这段描述会显示在相册页面和共享链接中

移动端与 Web/桌面端操作一致:

  1. 打开相册;
  2. 打开溢出菜单(三个点);
  3. 选择Edit details(编辑详情)
  4. 输入或更新描述;
  5. 选择Save(保存)

描述的实现细节

  • 描述存储在相册的公开元数据(Public Magic Metadata)中,密钥为caption
  • 描述最大长度为 200 个字符maxAlbumDescriptionLength = 200,见 collection_magic.dart);
  • 移动端编辑弹窗对输入框设置了maxLength: maxAlbumDescriptionLength进行强制限制(见 edit_album_details_sheet.dart);
  • 显示时会对描述做trim()处理,空白描述不会展示(displayDescription字段,见 collection.dart)。

设置相册封面

你可以从相册中任选一张照片作为封面,用于在相册列表中展示。

移动端

  1. 打开要修改的相册;
  2. 点击右上角的溢出菜单(三个点);
  3. 选择Edit details(编辑详情)
  4. 点击照片右下角的绿色铅笔图标
  5. 在弹出的面板中浏览照片,点击想要设为封面的图片;
  6. 点击Use selected photo(使用所选照片)

Web / 桌面端

  1. 点击要修改的相册;
  2. 点击右上角的溢出菜单(三个点);
  3. 点击Edit details(编辑详情)
  4. 点击照片右下角的绿色铅笔图标
  5. 选择要作为封面的图片;
  6. 点击Confirm(确认)

封面的实现细节

封面照片的 ID 保存在公开元数据的coverID字段中(CollectionPubMagicMetadata.coverID)。由于它属于"公开魔法元数据",封面设置可以被分享者或通过公开链接看到;相册是否已有封面通过hasCover判断(pubMagicMetadata.coverID > 0,见 collection.dart)。


在地图上查看相册照片

你可以按地理位置浏览相册中的回忆:

  1. 打开相册;
  2. 点击右上角的溢出菜单(三个点);
  3. 选择Map(地图)
  4. 相册中的所有照片都会显示在地图视图中。

地图视图的相关功能可进一步参考 Map and location 文档。


排序相册

按时间顺序整理相册中的照片,让最新或最旧的回忆优先展示。

移动端

  1. 打开相册;
  2. 点击右上角的溢出菜单(三个点);
  3. 选择Sort by(排序方式)
  4. 选择Newest first(最新优先)Oldest first(最旧优先)

Web / 桌面端

  1. 打开相册;
  2. 点击右上角的溢出菜单(三个点);
  3. 点击Sort by(排序方式)
  4. 选择Newest first(最新优先)Oldest first(最旧优先)

Web 端还支持对相册列表本身(而非单个相册内的照片)进行排序,排序选项定义在 collection-summary.ts:

排序方式含义
name-asc/name-desc按名称升序 / 降序
creation-time-asc/creation-time-desc按创建时间升序 / 降序(利用相册 ID 随创建时间递增的特性)
updation-time-asc/updation-time-desc按最后更新时间升序 / 降序

置顶相册

把最常用的相册固定在列表顶部,便于快速访问。

移动端

  1. 打开相册;
  2. 点击右上角的溢出菜单(三个点);
  3. 点击Pin album(置顶相册)Unpin album(取消置顶)

置顶的实现细节

置顶状态存储在魔法元数据(Magic Metadata)的order字段中:order值越大,相册在显示时优先级越高(源码注释:"Higher values give a collection higher display priority",见 collection_magic.dart)。相册是否置顶通过isPinned判断(magicMetadata.order != 0,见 collection.dart)。

在 Web 端的排序优先级体系中,置顶相册(pinned)的优先级为 7,仅次于系统相册(system,9)和收藏夹(favorites,8),高于普通相册(0),见 collection-summary.ts。置顶的相册卡片在 AllAlbums.tsx 中会显示图钉(PushPin)图标。


在 Web 和桌面端查找相册

打开All Albums(所有相册),可以搜索相册名称,或通过过滤器筛选列表。可用的过滤器包括:

  • Links(链接):通过快速链接创建的相册;
  • Shared(已共享):你分享给他人的相册;
  • Received(收到的):他人分享给你的相册;
  • Empty(空相册):你拥有、未共享、未归档且不含任何照片或视频的相册。

过滤器的源码实现

Web 端过滤器逻辑在 AllAlbums.tsx 中实现,对应关系如下:

过滤器判断条件
shared不包含sharedIncomingquickLink,且包含sharedOutgoingsharedViaLink
received包含sharedIncoming属性
links包含quickLink属性
empty-albums满足isBulkDeletableEmptyAlbum条件(见下文)

此外,只有当某个过滤器下确实存在相册时,该过滤器按钮才会显示;搜索框会对相册名称做不区分大小写的匹配(name.toLowerCase().includes(searchLower))。


空相册(Empty Albums)

空相册指不包含任何照片或视频的相册。它可能以两种方式产生:

导入过程中:

只要 Ente 检测到某个文件属于某个相册,就会自动创建该相册——即使这个文件是不受支持的格式(例如文本文件)。如果其中没有有效的照片或视频文件,就可能产生空相册。

手动创建:

当你创建了相册但没有向其中添加任何照片时,该相册会保持为空。

批量删除空相册

如果相册列表被大量空相册占满,你可以一次性批量删除。

移动端:

  1. 打开Albums(相册)标签页;
  2. 如果你有超过 2 个空相册,会看到Delete empty albums(删除空相册)按钮;
  3. 点击该按钮;
  4. 确认删除。

该功能会在初始同步完成空相册超过 2 个时出现,执行后会删除资料库中全部符合条件的空相册。

Web / 桌面端:

  1. 打开All Albums(所有相册)
  2. 选择Empty(空相册)过滤器;
  3. 确保相册搜索框为空;
  4. 点击对话框底部的Delete empty albums(删除空相册)
  5. 确认删除。

Empty(空相册)过滤器只在你有至少3 个符合条件的空相册时出现。只会删除你拥有、且未共享、未归档的空相册。

空相册删除的判定条件与执行细节

以 Web 端为例,isBulkDeletableEmptyAlbum要求同时满足(见 collection-summary.ts):

  • 文件数为 0(fileCount == 0);
  • 类型为albumfolder
  • 不是系统相册(system);
  • 未被共享(shared);
  • 未被归档(archived)。

真正执行删除前,Web 端还会在本地二次核对:先重新拉取远端数据,再逐一确认该相册没有文件、拥有者是当前用户、无 sharees、无公开链接、未归档且非默认隐藏(见 AllAlbums.tsx),然后以deleteCollection(id, { keepFiles: true })删除——keepFiles: true表示服务端只有在相册确实为空时才允许删除,否则拒绝,避免误删仍含文件的相册。

移动端的实现位于 delete_empty_albums.dart:它遍历CollectionsService中的相册列表,剔除canDelete为 false 的类型(favoritesuncategorized不可删除,见 collection.dart)以及仍含文件的相册,然后逐个调用trashEmptyCollection。底层逻辑在 collections_service.dart 中,同样使用keepFiles: true调用deleteCollection,并通过isBulkDelete标志跳过频繁的相册刷新、直接更新本地缓存,删除完成后触发CollectionUpdatedEvent并重新同步服务。


从桌面端上传嵌套文件夹

使用桌面端从电脑上传照片和视频时——无论是拖拽文件夹或 zip 文件,还是通过 watch folders(监视文件夹) 功能——你可以选择如何处理嵌套的文件夹结构。

单个文件或扁平文件夹

如果上传的是单个文件,或没有嵌套子文件夹的文件夹,桌面端会询问你:

  • 上传到已有的 Ente 相册,或
  • 新建一个相册

应用会根据文件夹名称智能推荐新相册的名称。

嵌套文件夹结构

如果文件夹包含嵌套子文件夹,且你选择新建相册,会看到两个选项:

单一相册(Single album):

  • 创建一个以父文件夹命名的 Ente 相册;
  • 所有嵌套子文件夹中的文件全部进入这一个相册;
  • 示例:文件夹Photos包含New Year/Summer/→ 创建一个名为 "Photos" 的相册,包含所有文件。

独立相册(Separate albums):

  • 为每个嵌套子文件夹分别创建一个独立的 Ente 相册;
  • 只有至少包含一个文件的文件夹才会成为相册(空文件夹被忽略);
  • 只使用叶子文件夹名(例如A/B/C/Photos/x.jpg1/2/3/Photos/y.jpg都会进入名为 "Photos" 的相册);
  • 示例:文件夹Photos包含New Year/Summer/→ 创建两个相册:"New Year" 和 "Summer"。

[!NOTE]

Ente 相册不支持嵌套。在独立相册模式下,每个嵌套文件夹都会成为一个顶层相册——它们不会以层级结构组织。

关于自动桌面同步,可进一步参考 watch folders 文档。值得注意的是,watch folders 的嵌套处理选项与拖拽上传时的选项一致(该文档明确引用了本页的嵌套结构说明),并且它目前是单向同步——把导出数据放到被监视的同一文件夹会导致未定义行为(重复文件、导出停滞等)。


相关 FAQ

以下是官方文档中与本主题相关的常见问题索引(见 albums.md):

  • Ente 相册可以嵌套吗?
  • 上传嵌套文件夹结构时会发生什么?
  • 我可以同步包含多个子文件夹的文件夹吗?
  • 为什么新的 iOS 相册中的照片没有全部出现在对应的 Ente 相册中?
  • Ente 如何处理属于多个 iOS 相册的照片?

小结

Ente Photos 的相册功能建立在服务端加密的 Collection 模型之上,具备多归属不重复计费、全设备自动同步、不支持嵌套三大核心特性。通过本文,你已经掌握了相册的全生命周期管理:创建、重命名、描述(上限 200 字符)、封面(coverID)、地图视图、相册内排序、置顶(order优先级)、All Albums 过滤与搜索,以及空相册的批量清理(Web 端需 ≥3 个、移动端需 >2 个才会显示入口)。对于桌面端用户,嵌套文件夹上传的"单一相册 / 独立相册"两种模式,可以让你在保留文件夹语义(扁平化为顶层相册)与合并归组之间自由选择。

【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询