将外部img存储在Drupal中,就好像它是由用户上传一样

时间:2010-07-12 16:06:07

标签: drupal cck imagefield

我有一个方案,用户可以使用CCK通过ImageField(图片)&上传图像或视频(来自youtube或vimeo)。 Embedded Media Field(视频)

我的网站一直在使用ImageField图像在各种视图中使用图像缓存操作创建缩略图。

Youtube / vimeo提供了我想用作图像“后备”的视频图像捕捉。

我不想重写每个视图以提供此回退,并保持一致性,我想知道下载和存储外部视频捕获图像的最佳路径,就好像用户将其作为带有视频的图像上传一样。

我熟悉规则&动作和PHP,我应该做的任何基本概述都非常感激。

2 个答案:

答案 0 :(得分:1)

这将是自定义模块的一部分。我不知道有一个处理这个问题的模块。

比如模块不容易写。如果它必须执行(每个站点必须执行,对吗?)它将包含某种队列或假脱机机制,因此它可以在自己的时间处理和下载远程视频。 如果您希望视频采用一致的格式,则可能需要编码街道。 它需要很多丑陋的黑客,因为毕竟,Youtube不允许下载他们的视频并且会尽可能地让它变得更难。

答案 1 :(得分:1)

hook_nodeapi($op == 'presave', ...)中,您可以检查是否提供了图片并从youtube下载。一个简单的解决方案可能是使用drupal_http_request()下载文件,然后file_save_data()将其写入磁盘。但是这会将文件内容加载到内存中,这是不需要的。我认为Curl可以用来直接将HTTP文件下载到磁盘。

保存节点时下载文件会导致性能问题(因为它会增加响应时间)。在这种情况下,您可以将其延迟到hook_cron的实现。您可以使用Job Queue轻松将图像下载排入下一个cron。如果在Drupal的cron期间运行是一个问题,您也可以尝试使用Drupal Queue模块单独处理下载。