# 批量内容导入器
该工具允许通过解析文件系统文件夹的内容,将图片、相册和用户批量导入到基于 Chevereto 的网站中。当你想导入大量的内容时,可以使用它,不然使用 API 或 web gui 导入会很麻烦
导入 != 同步
导入:从导入路径中获取内容,并将其导入到数据库、文件系统或外部存储中,完成后,会从导入路径中删除文件
# 使用方法
进入 仪表盘/批量导入
,在那里你可以添加和管理导入作业
权限
确定 PHP 程序对该文件路径有可读写权限。请确保 www-data
(或您的具体用户,比如宝塔面板的 www
用户)拥有目标导入文件夹读写权限
# 解析格式
批量导入器会扫描目标导入目录,并创建相应的内容解析规则,如下所述。用户资产(头像、背景图片)将被上传到系统用户文件夹。
提示
只有在用户和相册不存在的情况下,解析器才会创建这些用户和相册。它会检测 用户名
是否存在,对相册也会做同样的检测(根据相册名称 + 其所有者)
# 顶层文件夹为用户名
导入路径中的顶级文件夹将作为 用户名
处理。二级文件夹将被解析为 相册名
./<path>
└── rodolfo <- 用户名
├── weapons <- 相册名称
│ ├── machine-gun.jpg
│ └── rocket-launcher.jpg
└── logo-alt.png
对于上面的文件目录树,解析器将:
- 创建
rodolfo
用户(如果用户不存在) - 在
rodolf
o 用户下创建相册weapons
(如果相册不存在) - 将
./<path>/rodolfo/weapons
中的图片上传到 rodolfo 的weapons
相册 - 将
logo-alt.png
上传到rodolfo
(无相册名)
# 顶层文件夹为相册
导入路径内的顶层文件夹将作为 相册名称
处理
./<path>
└── weapons <- 相册名称
├── machine-gun.jpg
├── rocket-launcher.jpg
└── logo-alt.png
对于上面的文件目录树,解析器将:
- 以访客用户身份创建相册
weapons
(如果相册不存在) - 将
./<path>/weapons
中的图像上传到weapons
相册
# 不解析文件夹
不解析任何文件夹,只将图片以访客身份导入
./<path>
├── machine-gun.jpg
├── rocket-launcher.jpg
└── logo-alt.png
对于上面的文件目录树,解析器将:
- 以访客用户身份将
./<path>
中的图片上传到系统
# 自动导入
自动导入是通过检测 importing/
路径下所有文件来执行任务的。在这个路径中,你会看到遵循给定解析格式的文件夹。只需按照格式将内容添加到这个文件夹中即可
路径 | 解析方式 |
---|---|
./importing/parse-users | 顶层文件夹为用户名 (opens new window) |
./importing/parse-albums | 顶层文件夹为相册 (opens new window) |
./importing/no-parse | 不解析文件夹 (opens new window) |
# Cron 表达式
自动导入是通过计划命令来处理的,在 仪表盘/批量导入
处,你会看到一个 Cron (opens new window) 表达式,如下所示:
* * * * * IS_CRON=1 THREAD_ID=1 /usr/bin/php /public_html/importing.php >/dev/null 2>&1
上面的 Cron 表达式表示每分钟运行一次导入器,并带有 THREAD_ID=1
标志。
请向您的服务器管理员咨询如何在您的服务器上添加这个代码
# 性能优化
您可以通过在多个线程中运行导入来加快此过程。只需添加更多 cron 表达式:
* * * * * IS_CRON=1 THREAD_ID=1 /usr/bin/php /public_html/importing.php >/dev/null 2>&1
* * * * * IS_CRON=1 THREAD_ID=2 /usr/bin/php /public_html/importing.php >/dev/null 2>&1
只要你的硬件配置跟得上,想添加多少就多少!
# 锁定
你可以在 ./importing/.lock
路径下添加一个 .lock
空文件,可以锁定自动导入功能,在此文件删除之前,不会执行自动导入程序。
# 手动导入
手动导入的工作方式是创建一次性任务,该任务将在您选择的文件系统路径并用你选择的解析方式执行。
权限
确定 PHP 程序对该文件路径有可读写权限。请确保 www-data
(或您的具体用户,比如宝塔面板的 www
用户)拥有目标导入文件夹读写权限
添加导入作业后,点击 "操作" 菜单下的 "处理"。使其工作状态变为 "工作"
注意
手动导入是靠浏览器 JavaScript 执行的,这意味着你必须保持网页浏览器的活动状态来进行这个过程。别担心,这个过程可以在任何时候暂停/恢复
# 状态
导入工作的状态定义如下:
状态 | 描述 |
---|---|
Queued(队列中) | 作业处于处理队列中(默认状态) |
Working(工作中) | 作业正在解析中 |
Paused(已暂停) | 作业暂停 |
Canceled(已取消) | 用户中止的作业 |
Completed(已完成) | 工作完成(所有内容已解析) |
提示
自动导入可能会在没有其他需要解析任务的情况下显示 "已完成",当它检测到要被解析的内容时,它会自动重新进入队列
# 元数据
批量导入程序支持使用 JSON 格式的元数据(描述其他数据的数据),与 Google Photos (opens new window). 相同
必须为每个内容提供元数据,这意味着您必须为每个内容使用一个元数据文件。
Content | Type | Metadata file |
---|---|---|
rodolfo/ | username | rodolfo/metadata.json |
rodolfo/weapons/ | album | rodolfo/weapons/metadata.json |
rodolfo/weapons/machine-gun.jpg | image | rodolfo/weapons/machine-gun.json |
rodolfo/weapons/rocket-launcher.jpg | image | rodolfo/weapons/rocket-launcher.json |
rodolfo/logo-alt.png | image | rodolfo/logo-alt.json |
下面的树显示了上面表格的元数据。
./<path>
└── rodolfo
├── weapons
│ ├── machine-gun.jpg
│ ├── machine-gun.json
│ ├── rocket-launcher.jpg
│ ├── rocket-launcher.json
│ └── metadata.json
├── logo-alt.png
├── logo-alt.json
└── metadata.json
注意事项
元数据属性合并了被解析的内容,也就是说,你不需要明确指出所有的属性,只需要描述你需要的内容
# 图片元数据
以下 JSON 元数据文件提供了 Machine-Gun.jpg
的元数据示例:
{
"imageData": {
"title": "Machine gun",
"description": "Say hello to my little friend!",
"nsfw": false,
"category": {
"name": "Guns",
"urlKey": "Guns",
"description": "Guns don't kill people, sugar does."
}
}
}
图片分类
只要你同时提供 name
和 urlKey
,就会根据需要创建图片分类
# 相册元数据
以下 JSON 元数据文件提供了 guns/
相册的元数据示例:
{
"albumData": {
"title": "Guns",
"description": "Guns should be banned.",
"access": "private",
"privacy": {
"type": "password",
"password": "12345"
}
}
}
对于相册的私密性,你可以选择:
隐私类型 | 影响 |
---|---|
public | 公共相册,访客开放 (默认) |
private | 私有相册,仅所有者可访问 |
private_but_link | 和私有相册一样,但任何人都可以通过链接访问 |
password | 将设置相册的访问密码 |
例如,如果你需要设置为 private_but_link
,元数据属性应该是这样的:
{
"privacy": {
"type": "private_but_link"
}
}
# 用户元数据
下面的 JSON 元数据文件提供了一个 rodolfo/
用户的元数据示例:
{
"userData": {
"role": "user",
"name": "Rodolfo Berrios",
"username": "rodolfo",
"email": "rodolfo@chevereto.com",
"website": "https://rodolfoberrios.com",
"bio": "I'm the Master of Puppets @chevereto, the alpha-omega. He/Him/They.",
"profileImages": {
"avatar": "rodo-avatar.jpg",
"background": "rodo-bkg.jpg"
},
"networks": {
"facebook": "no!",
"twitter": "godlike"
},
"timezone": "America/Santiago",
"language": "cl",
"private": false
}
}
资料图片必须位于用户文件夹内的 .assets/
文件夹中
./<path>
└── rodolfo
└── .assets
├── rodo-avatar.jpg
└── rodo-bkg.jpg
用户资料
用户资料图片的文件类型必须是您启用的图像文件格式之一
# 查看日志
整个导入过程会被记录在位于 /app/import/jobs/<id>/logs/
的文本文件中。您可以跟踪 process.txt
和 error.txt
来获取导入过程的实时状态。你也可以通过点击 "操作 "菜单来访问这些日志。
# 从 Google Photos 导入
使用的元数据格式与 Google Photos 使用的完全相同,这意味着您可以摆脱该专有服务,开始拥有您的照片。
- 进入 Google Takeout (opens new window)
- 选择 Google Photos 并按照流程操作
- 在交付方式中,选择 通过电子邮件发送下载链接
- 完成后,您将获得一个压缩文件
- 将
Takeout/Google Photos
文件夹重命名为目标用户名,例如:Takeout/Rodolfo
这里,你可以采取 自动导入 或 手动导入 方式导入该文件夹下的内容
元数据
从 Chevereto V3.17 版本开始,可以识别所有的 Google Photos 元数据了