我正在学习这教程,介绍如何将文件从D7迁移到D8。
我有具有以下yml配置的迁移设置:
uuid: a685a4e0-1022-4bf2-a787-f6f1bef587ea
langcode: en
status: true
dependencies: { }
id: d8_files
class: null
field_plugin_method: null
cck_plugin_method: null
migration_tags:
- 'Drupal 7'
- Content
migration_group: D7-TO-D8
label: 'D7 to 8 Public files'
source:
plugin: d7_file
scheme: public
constants:
# source_base_path: 'sites/default/files/'
# source_base_path: '/var/www/d8/sites/default/files/'
# source_base_path: '/var/www/d8/sites/default/files/d7_download/page/files/'
# source_base_path: '/sites/default/files/d7_download/page/files/'
# source_base_path: '/var/www/d7/sites/default/files/page/files/'
source_base_path: '/var/www/d7/sites/default/files/'
process:
fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- filepath
-
plugin: urlencode
uri:
plugin: file_copy
source:
- '@source_full_path'
- uri
filemime: filemime
status: status
created: timestamp
changed: timestamp
uid: uid
destination:
plugin: 'entity:file'
migration_dependencies: null迁移-状态表示已在D7数据库中检测到超过2000个文件可供迁移,但当我尝试迁移时,它只报告0迁移的内容和错误,如下所示:

我的猜测是,迁移不知道在哪里找到图像,但是我已经尝试过通过更改source_base_path值来找到这些映像的各种路径,但是仍然没有迁移的文件。
有人能帮忙吗?
我在阻止移民的问题上发现了更多。
当我检查d8_files迁移的日志时,我发现了如下消息:
File'/var/www/d8/sites/default/files/d7_download//sites/default/files/field/image/imagefield_OvRwVF.jpeg' does not exist问题在于模块如何创建文件url。
在我的d8_file.yml的源代码部分,我设置了以下内容:
source_base_path: '/var/www/d8/sites/default/files/d7_download/'..。这是指向包含我希望迁移的文件的目录的绝对路径。迁移模块将/sites/default/files连接到路径的末尾,这使其出错。我尝试过通过在../../设置中使用source_base_path导航目录路径,但是它不起作用.只是被看作是一根绳子。
在流程部分,我看到了以下内容:
process:
fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- filepath我怀疑问题就在于减值问题。但是,我不知道它还有什么价值。
有人能建议系统在哪里找到任何插件上的此类信息吗?
发布于 2021-11-02 11:37:11
您可以在Drupal.org:https://www.drupal.org/project/drupal/issues/3123350上找到当前的问题
作为解决办法,您可以在源数据库副本中运行此操作以删除前缀:
DELETE FROM variable WHERE name="file_private_path";有关进一步讨论和背景情况,请参阅该问题。
发布于 2021-11-02 14:01:49
如果需要在" public ://“和" private ://”等文件路径中替换公共或私有文件的完整路径,而不只是将文件路径作为源,那么在此之前进行必要的替换:
source_public_absolute_path:
-
plugin: str_replace
source: uri
search: 'public://'
replace: 'sites/default/files/'
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- '@source_public_absolute_path'https://drupal.stackexchange.com/questions/283175
复制相似问题