Help us learn about your current experience with the documentation. Take the survey.
上传文件清理 Rake 任务
- 版本:免费、专业、旗舰
- 产品:GitLab 自管理版
在上传 JPG 或 TIFF 图片时,EXIF 数据会自动移除。
EXIF 数据可能包含敏感信息(例如 GPS 位置),因此您可以从旧版 GitLab 中上传的现有图片中移除这些数据。
前提条件
要运行此 Rake 任务,您的系统上需要安装 exiftool。如果您安装 GitLab 的方式是:
-
使用 Linux 软件包安装,则无需额外操作。
-
使用自编译安装,请确保已安装
exiftool:# Debian/Ubuntu sudo apt-get install libimage-exiftool-perl # RHEL/CentOS sudo yum install perl-Image-ExifTool
从现有上传文件中移除 EXIF 数据
要从现有上传文件中移除 EXIF 数据,请运行以下命令:
sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif默认情况下,此命令以“dry run”(试运行)模式运行,并不会真正移除 EXIF 数据。它可用于检查哪些(以及有多少)图片需要清理。
此 Rake 任务接受以下参数。
| 参数 | 类型 | 描述 |
|---|---|---|
start_id |
整数 | 仅处理 ID 大于或等于此值的上传文件 |
stop_id |
整数 | 仅处理 ID 小于或等于此值的上传文件 |
dry_run |
布尔值 | 不移除 EXIF 数据,仅检查是否存在 EXIF 数据。默认为 true |
sleep_time |
浮点数 | 处理每张图片后暂停的秒数。默认为 0.3 秒 |
uploader |
字符串 | 仅对指定上传器的上传文件运行清理:FileUploader、PersonalFileUploader 或 NamespaceFileUploader |
since |
日期 | 仅对晚于指定日期的上传文件运行清理。例如 2019-05-01 |
如果您的上传文件数量过多,可以通过以下方式加速清理:
- 将
sleep_time设置为更小的值。 - 并行运行多个 Rake 任务,每个任务处理一个独立的上传 ID 范围(通过设置
start_id和stop_id)。
要从所有上传文件中移除 EXIF 数据,请使用:
sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[,,false,] 2>&1 | tee exif.log要移除 ID 在 100 到 5000 之间的上传文件的 EXIF 数据,并在处理每个文件后暂停 0.1 秒,请使用:
sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:sanitize:remove_exif[100,5000,false,0.1] 2>&1 | tee exif.log输出内容会写入 exif.log 文件,因为输出内容通常很长。
如果某个上传文件的清理失败,Rake 任务的输出中应会包含一条错误信息。常见原因包括文件在存储中丢失,或该文件不是有效的图片。
请报告任何问题,并在问题标题中使用 ‘EXIF’ 前缀,同时附上错误输出以及(如果可能)相关图片。