Force user to fill in at least text area or file
I don't know how you could achieve this with rules. You could however create a small custom module that adds a form validation function to the node edit form. The validator would check that the appropriate conditions are met.

Edit: something like this would work I think for content type page.

/**
 * Implements hook_form_FORM_ID_alter for page_node_form.
 *
 * @see module_validate
 */
function module_form_page_node_form_alter(&amp;$form, &amp;$form_state) {
  $form['#validate'][] = 'module_validate';
}

/**
 * Form validator for page_node_form.
 */
function module_validate($form, &amp;$form_state) {
  // This strips HTML tags - to disable, remove the filter_xss() call.
  $body_length = drupal_strlen(filter_xss($form_state['values']['body'], array()));

  // We're assuming the field is called 'file' and we're checking the first file.
  $file = $form_state['values']['field_file'][0];

  // Rather than checking against 300, we should perhaps call node_get_types()
  // and find the configured word limit.
  if (body_length &lt; 300 &amp;&amp; !$file['fid']) {
    form_set_error('body', t('Please ensure that you either enter 300 characters into the body field, or upload a file.'));
  }
}