将现有服务器文件附加到filefield


7

在Drupal 7中,如何为文件字段设置现有文件路径?我看到的唯一选择是再次上传文件。

在Drupal 6中,FileField Sources似乎可以做到这一点。

FileField或路径IMCE与文件一起领域允许服务器文件分配?
是否有API以编程方式管理文件字段?

编辑
我刚刚发现这个可以全部与媒体模块来完成。我还安装了mediaelement。但是,它并不完全直观,因此这里是我采取的步骤:

导入媒体库: /admin/content/media/import

创建一个mediafile asset字段。这使您可以从库中附加。

显示格式(例如音频)位于/admin/config/media/types/manage/audio/display/,而不是仅提供“大”,“小”,“预览”等内容类型的“管理显示”。

Answers:



3

我选择将IMCE用于文件字段(D7)的IMCE结合使用因为客户端需要快速,轻松地选择通过ftp上传的文件-且无需为每个节点复制它们。

据我所见,“文件字段源”此刻始终在复制附件。Media提供的进口商也这样做。



2

我可以帮助您将文件附加到filefiled。但是,我没有尝试实现自动完成小部件来获取要附加到文件字段的文件。

您可以file_get_contents()用来获取要附加的文件,然后使用file_save_data将其放入Drupal。要注意的是,您需要更改刚刚添加的文件的状态,以便以后可以将其附加到节点。否则,您将收到验证错误。

$file = file_save_data($data, $destination = NULL, $replace = FILE_EXISTS_RENAME);

db_update('file_managed')
  ->fields(array('status' => 0))
  ->condition('fid', $file->fid, '=')
  ->execute();

提交表单后,将fid作为文件字段的值,您要附加到托管文件的文件状态将自动更新。

请访问http://api.drupal.org/api/drupal/includes--file.inc/group/file/7,以获取更多参考。


这看起来很有希望。两个简单的问题:1)之后要附加到节点,$node = node_load($nid); $node->field_myfilefield[$node->language][0] = $file; node_save($node); 应该工作吗?2)我假设1在附加到节点后应该将状态设置回?还是node_save为我这样做?谢谢!
brian_d 2011年

您的假设关于保存节点是正确的。但是,这样做会自动将状态设置回1,因此您不必担心手动进行操作。我苦苦挣扎了一段时间,因为它没有将文件添加到托管文件表而不将状态设置为1的功能。我在批量操作中使用了它,该操作从另一台服务器下载文件并将其附加到节点上。在我的Drupal网站上。一方面,如果您正在使用批处理,则无法使用file_get_contents()它将失败。您应该使用drupal_http_request()
Jepedo 2011年

第二个想法是,我不确定node_save是否将状态更改为1。在我所参考的示例中,我使用了drupal_form_submit()来确保node_save通过验证。在这种情况下,状态会自动更新为1。您可能需要根据情况手动更新它。尽管node_save()的行为可能相同。
Jepedo 2011年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.