kodie
10/13/2017 - 6:30 PM

Upload base64 encoded file to Wordpress

<?php
function base64_upload($base64, $filename = null) {
  if (!$filename) $filename = md5($base64);
  if (!pathinfo($filename, PATHINFO_EXTENSION)) $filename .= '.jpg';

  $content = base64_decode($base64);
  $upload_dir = wp_upload_dir();
  $file = $upload_dir['path'] . DIRECTORY_SEPARATOR . $filename;

  file_put_contents($file, $content);

  $mime_info = wp_check_filetype_and_ext($file, $filename);

  if ($mime_info['proper_filename']) $filename = $mime_info['proper_filename'];

  $file_info = array(
    'name'      => $filename,
    'type'      => $mime_info['type'],
    'tmp_name'  => $file,
    'error'     => 0,
    'size'      => strlen($content)
  );

  $overrides = array(
    'test_form' => false,
    'test_size' => true
  );

  $result = wp_handle_sideload($file_info, $overrides);

  if (empty($result['error'])) {
    $attachment = array(
      'guid'           => $result['file'],
      'post_mime_type' => $mime_info['type'],
      'post_title'     => $filename,
      'post_content'   => '',
      'post_status'    => 'inherit'
    );

    $result['id'] = wp_insert_attachment($attachment, $result['file']);
    $result['metadata'] = wp_generate_attachment_metadata($result['id'], $result['file']);

    wp_update_attachment_metadata($result['id'], $result['metadata']);
  }

  return $result;
}
?>