将现有S3媒体导入WP

时间:2018-07-08 作者:STS

我刚刚开始学习WP开发的方法,刚刚接管了一个旧的非WP站点的开发,该站点在S3上存储了1000个媒体(主要是音频)文件。

对于新的上传,我计划继续使用S3,并使用卸载S3插件。但是,我还需要将现有的S3文件集成到媒体库中。下载12000个文件(约100 GB),然后重新上传(即使使用一些批量上传插件),这似乎不是一个很好的选择。

我曾考虑在数据库级别这样做,在wp\\U帖子和wp\\U Posteta中创建新记录,复制附件帖子的格式,然后在Posteta中创建amazonS3\\u信息,但这似乎不是最可靠的解决方案。

(附带问题-就WP集成而言,S3是最佳选择还是谷歌云存储更好?我知道两者都有插件。)

感谢您的帮助!

1 个回复
最合适的回答,由SO网友:Dev Null 整理而成

理论上你会认为它可以这样工作。

实际上,事实并非如此。

有一个简单的原因,没有插件可以做到这一点。每当您将媒体导入WordPress时,它都会创建各种大小的缩略图文件(即使是视频)。

为了创建这些缩略图,它必须下载(您猜对了)整个媒体文件。如果是视频,你可以下载到第一帧,然后用它来制作缩略图,但这需要一些自定义编码才能在一定的字节数后停止下载。

因此,最终,考虑到批量下载文件比一次下载一个文件要容易得多,这是不现实的。

实用的方法是一次下载一个文件,将其插入WordPress(不是直接插入数据库,而是通过调用适当的WP函数),然后将该文件的所有相关缩略图上传到S3,然后删除下载的文件和生成的缩略图。

目前,没有插件可以做到这一点。

此方法的一个禁止因素是,在整个下载过程中,必须在单个web调用的持续时间内完成缩略图、上载和删除操作(即,在浏览器中,您点击一个按钮调用WordPress并启动所有这些工作),如果服务器在这么多秒的不活动后有断开连接的设置,或者php有一个设置,只在设定的时间长度内运行脚本,并且您对单个文件的处理超出了这些超时时间,该处理将被中止,您的系统上会有剩余的文件,您会向开发人员寻求帮助,认为这是他的插件,而实际上这只是一种糟糕的方式。

附录,既然你在询问mp3数据,下面是你必须做的事情。也许有些不太好的消息。

大笔刷笔划:

找到一个可以导入的插件,看看是否可以复制/修改该过程以满足您的需要步骤1:

查看“从服务器添加”插件。class.add-from-server.phpfunction handle_import_file( ). 如果你仔细阅读,你会发现它实际上从mp3中提取元数据(调用wp_read_audio_metadata), 所以这应该是本地文件。我认为您有两种选择:(1)您并不真正需要元数据,所以您可以修改代码来跳过它,或者(2)您有一些本地形式的元数据,而不是从mp3中提取,而是从本地源中提取。

第2步:

我使用tcs3,我不得不破解它。我想从长远来看,我只需要将它复制到我自己的插件中,这样我就不会意外地自动更新超过我的更改。总之,插件不能按原样工作,我必须编辑代码才能让它工作。

我从这一切中学到的教训是,看起来你不能只编辑表格,然后全部更改http://example.com/ 到s3://mybucket/并让它工作。

WP使用过滤器(在这种情况下,wp_get_attachment_url) 要构建“正确”的url,请调用已在该筛选器中注册的所有人,将本地url传递给他们,并允许他们修改url。

为了让它正常工作,我必须让tcs3的代码检查它是否设置了“is\\u on\\u s3”标志,如果设置了,则需要更改URL,否则就不用管它了。不是开玩笑,他们的代码不是这样工作的。在我进行更改之前,它将所有URL更改为s3,无论它是否实际上载了文件。

我的建议是让您自己制作插件,将Add复制到服务器作为起点,(a)修改元数据的使用,(b)提供您自己的插件wp_get_attachment_url 可以判断URL是否是s3文件之一并适当更改URL的过滤器。

结束

相关推荐

MEDIA_SIDELOAD_IMAGE导致http错误(500)

我想导入一个带有media\\u sideload\\u image的外部映像,但我得到了HTTP代码500。我的代码有什么问题?function test() { media_sideload_image(\"https://s.w.org/style/images/wp-header-logo.png?1\", 1261, null, \"id\"); } add_action(\"init\", \"test\"); 我想导入外部图像并生成图像大小