2012-01-30 52 views
4

Im新的drupal,现在我需要以编程方式创建节点。无法添加图像字段在Drupal 7

我可以创建一个简单的节点。但是如果我将它与图像领域结合,它总是失败。

$file_path = drupal_realpath('tmp/test_image.jpg'); 
$file = (object) array(
    'uid' => 1, 
    'uri' => $file_path, 
    'filemime' => file_get_mimetype($file_path), 
    'status' => 1, 
); 
$copy = file_copy($file, 'public://sites/default/files/field/image/testing/', FILE_EXISTS_RENAME); 
$node->field_image[LANGUAGE_NONE][0] = (array) $copy; 

,它总是返回我一个错误:(

The specified file could not be copied, because the destination directory is not properly configured. This may be caused by a problem with file or directory permissions. More information is available in the system log. 
+2

检查您的图像文件夹的权限应该有'644'&还请检查您的系统日志错误提示.. – Rikesh 2012-01-30 05:37:55

+0

你好,我也曾尝试过。我甚至将网站文件夹设置为777.我检查了日志,这里是我得到的。 “无法复制图像,因为目标目录public://配置不正确。” – claire 2012-01-30 07:39:46

+0

'public' schema的默认路径是'/ sites/default/files',所以如果你想保存某些东西,例如'/ sites/default/files/my-images/image1.jpg',那么URI会是'public:// my-images/image1.jpg'。如果你保存这个节点作为表单提交的结果,我强烈建议查看['managed file' type](http://api.drupal.org/api/drupal/developer-- topic- forms_api_reference.html/7#managed_file)它将处理所有的文件保存为你 – Clive 2012-01-30 10:30:26

回答

0

我认为,如果你告诉file_copy()在存储“市民:”你不应该指定全路径名至少,在我看到的例子中,目标看起来更像'public:filename.ext'

正如上面的评论所建议的,检查你的日志以确保它的正确性除了Web服务器的错误日志之外,看看Drupal是否注意到了更多的细节其报告部分。

+0

我不太清楚这个公共目录是如何工作的,因为当我检查它的目录时,结果是错误的。 – claire 2012-01-30 09:16:08

0

'public://' = 'sites/default/files'(或指定为默认文件夹的任何其他文件夹)以Drupal方式。

您的代码:

$copy = file_copy($file, 'public://field/image/testing'); 

附: FILE_EXISTS_RENAME默认情况下,所以没有必要定义它。

+0

嗨,我试过了,它仍然无法正常工作。这可能与文件夹保留有关。但我已将公用文件夹设置为644. – claire 2012-01-31 01:25:09

+0

公用文件夹应设置为777.如果您有任何错误,请检查您的Drupal状态。如果你在'$ copy = file_copy(...)'后面加上'print_r($ copy)',它会给你什么? – 2012-01-31 09:16:09

+0

它返回null。 – claire 2012-02-01 03:25:27

0

感谢您的意见。我试图设置公共路径的'网站/默认/文件''测试'或任何其他文件夹,并设置为644.

它的工作原理。 :(

这是我更新的代码。

$file_path = drupal_realpath('test_image.jpg'); 
$file = (object) array(
    'uid' => 1, 
    'uri' => $file_path, 
    'filemime' => file_get_mimetype($file_path), 
    'status' => 1, 
); 
$copy = file_copy($file, 'public://', FILE_EXISTS_RENAME); 

林不知道还有什么,我需要在网站和其子文件夹设置权限。

+0

您的文件夹和所有子文件夹应该请设置为777.另外,请检查这些文件夹的所有者是否是“www-data”,而不是您的任何系统用户。 – 2012-01-31 09:24:33

2

我有同样的问题。 在我的情况问题是媒体配置“公共文件系统路径”被设置为相对路径网站/默认/文件。之后,我设置了从根目录的绝对路径一切工作