I am facing a situation here.
I have a content type A with an image field(field_upload_snaps) in it. There is another content type B which also contains an image field(field_valid_snaps).
Now user will upload the pics from A content type. So if user upload 3 pics via A then 3 FID and their corresponding URIs will be created in file_managed table in Drupal 7.
Now I have a requirement where I have to insert 2 images out of 3 programatically using Drupal code. Now there is no need to generate any new image copy in public URI as images already exist via A.
I tried two approaches:-
1) I have created a new node of Type B. I tried to fetch file URI,filesize,filemime and all relevant parameter from existing fid and associate with the node using this.
global $user;
$node = new stdClass();
$node->type = "user_slideshow_snaps";
$node->language = LANGUAGE_NONE;
node_object_prepare($node);
$node->uid = $user->uid;
$file = (object) array(
'uid' => $user->uid,
'uri' => 'public://1.jpeg" ,
'filemime' => 'image/jpeg',
'status' => 1,
);
$node->field_upload_snaps['und'][] = (array)$file;
$node = node_submit($node); // Prepare node for a submit
node_save($node);
But it gives me an error that "Cant insert duplicate value in file_managed". It will give because such value already exist in file_managed via A. So I am not able to save value.
2) I saved node first and then manually insert in the image field like this.
global $user;
$node = new stdClass();
$node->type = "user_slideshow_snaps";
$node->language = LANGUAGE_NONE;
node_object_prepare($node);
$node->uid = $user->uid;
$node = node_submit($node); // Prepare node for a submit
node_save($node);
db_insert('field_data_field_valid_snaps')
->fields(array(
'entity_type' => 'node',
'bundle' => 'user_actualD_snaps',
'deleted'=> 0,
'entity_id'=>$node->nid,
'delta'=>0,
'field_valid_snaps_fid'=>517,
'field_valid_snaps_alt'=>'',
'field_valid_snaps_title'=>'',
'field_valid_snaps_width'=>200,
'field_valid_snaps_height'=>300,
))
->execute();
But the line after node_save() doesnt execute in this case. So I am not able to save it.
Are there any functions available which will map existing images into another table?
Comments
This may not exactly answer
This may not exactly answer your question, but I had a similar issue whereby I had to create a node off of an image that was already uploaded - Look into using the file_copy function, setting the FILE_EXISTS_RENAME property. http://api.drupal.org/api/drupal/includes!file.inc/function/file_copy/7
I look into the file_copy()
I look into the file_copy() function and found that it copies file from one location to another. I have already original file copied at one location and I don't need to create a duplicate of same file by copying this. All I want to get the attributes of the original file required to create a new node of another content type without saving the file again and creating a new fid.
File_load api solved my
File_load api solved my problem of getting the file info without copying the file.Thanks.