I need to save and edit entities via services like {user, nodes, products ...etc}

the problem comes with images posted form mobile apps encoded base64.

I saved the file and stored the object in session to be used in hook_services_request_postprocess_alter to be added to the entity saved by loading it again and assign the value to the field

// in preprocess
$_SESSION['file'] = file_save_data(base64_decode($args[0]['image']),'public://test.png');

// in postprocess
$product = entity_load('commerce_product', array($result->product_id));
$wrapper = entity_metadata_wrapper('commerce_product', $product);

entity_save('commerce_product', $product);

what missing here I have tried many answers either adding the file object to the field when creating the field nor entity saving

  • 1
    First use Services to create the file and retreive its ID, then try using fid instead of value and set it equal to the file id. – tyler.frankenstein Mar 4 '15 at 9:33
  • The field is not file reference field its image upload field – Mohammed Gomma Mar 5 '15 at 12:49

It works after getting file mime type here is the code sample

$data = base64_decode($args[1]['avatar']);    
$finfo = finfo_open();
        $mime_type = finfo_buffer($finfo, $data, FILEINFO_MIME_TYPE);
        // get file type png. jpg
        $ext = $mime_type ? str_replace('image/', '', $mime_type) : 'png';
        $file_name = str_replace(' ', '-', $args[1]['name']);

then you we save the file using

$file = file_save_data($data, 'public://users/'.$file_name.'.'.$ext, FILE_EXISTS_REPLACE);

    $args[1]['field_field_user_picture'] = array(
        'fid' => $file->fid,
        'width' => 100,
        'height' => 100,
        'alt' => $args[1]['name'],
        'title' => $args[1]['name']

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.