我尝试使用file_scan_directory扫描一些文件并获取一些本地路径,我希望它们成为一个对象并保存到db中,所以我需要file_save这样做。 file_save将文件对象作为参数,我怎么能想这个程序成功?
我已经尝试了file_save_upload,API doc提到了参数“$ source ---一个指定要保存的上传文件的文件路径或URI的字符串。”但是它似乎没有读取路径并且总是返回null。
我也尝试自定义为file_save创建一个文件对象来运行,它确实有效,但不认为它是正确的drupal方式,是否有任何解决方案:
file_scan_directory-> ???? - > file_save - > field_attach_update(*保存文件后用新的fid更新字段)
请为此提供帮助,非常感谢!
答案 0 :(得分:1)
此代码段将扫描一些jpg文件,保存到db中,并将文件附加到字段中。
function test_form(){
$node = node_load('61');
unset($node->field_image[$node->language]);
$files = file_scan_directory('public://testimport', '/^.*\.(jpg|JPG)$/');
//dpm($files);
//http://drupal.org/node/889058
foreach($files as $fileobj){
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'file')
->propertyCondition('uri', $fileobj->uri)
//$query->propertyCondition('uri', 'public://%', 'LIKE');
->execute();
if(isset($result['file'])){
dpm($result['file']);
$fid = reset($result['file'])->fid;
$fileobj = file_load($fid);
}else{
$fileobj->filemine = file_get_mimetype($fileobj->uri);
$fileobj = file_save($fileobj);
}
$node->field_image[$node->language][] = array(
'fid' => $fileobj->fid,
//'alt' => $node->title,
//'title' => $node->title,
'uid' => '1',
'filename' => $fileobj->filename,
'uri' => $fileobj->uri,
'filemime' => $fileobj->filemime,
'filesize'=> $fileobj->filesize,
'status' => '1',
);
}
if($node = node_submit($node)) { // Prepare node for saving
node_save($node);
echo "Node with nid " . $node->nid . " updated!\n";
}
}