Update:

I took some code out of includes/classes/shopping_cart.php and modified it.

PHP Code:
$real_ids = isset($_POST['id']) ? $_POST['id'] : "";
            if (isset(
$_GET['number_of_uploads']) && $_GET['number_of_uploads'] > 0) {
             
             include_once(
DIR_WS_CLASSES 'upload.php');
              for (
$i 1$n $_GET['number_of_uploads']; $i <= $n$i++) {
               
              if (
zen_not_null($_FILES['id']['tmp_name'][TEXT_PREFIX $_POST[UPLOAD_PREFIX $i]]) and ($_FILES['id']['tmp_name'][TEXT_PREFIX $_POST[UPLOAD_PREFIX $i]] != 'none')) {
                
$products_options_file = new upload('id');
                
$products_options_file->set_destination(DIR_FS_UPLOADS);
                
$products_options_file->set_output_messages('session');
                if (
$products_options_file->parse(TEXT_PREFIX $_POST[UPLOAD_PREFIX $i])) {
                  
$products_image_extension substr($products_options_file->filenamestrrpos($products_options_file->filename'.'));
                  if (
$_SESSION['customer_id']) {
                    
$db->Execute("insert into " TABLE_FILES_UPLOADED " (sesskey, customers_id, files_uploaded_name) values('" zen_session_id() . "', '" $_SESSION['customer_id'] . "', '" zen_db_input($products_options_file->filename) . "')");
                
                  } else {
                    
$db->Execute("insert into " TABLE_FILES_UPLOADED " (sesskey, files_uploaded_name) values('" zen_session_id() . "', '" zen_db_input($products_options_file->filename) . "')");
                  }
                 
                  
$insert_id $db->Insert_ID();
                  
$real_ids[TEXT_PREFIX $_POST[UPLOAD_PREFIX $i]] = $insert_id ". " $products_options_file->filename;
                  
$products_options_file->set_filename("$insert_id$products_image_extension);
                  if (!(
$products_options_file->save())) {
                    break;
                  }
                } else {
                  break;
                }
                
              } else { 
// No file uploaded -- use previous value
                
$real_ids[TEXT_PREFIX $_POST[UPLOAD_PREFIX $i]] = $_POST[TEXT_PREFIX UPLOAD_PREFIX $i];
              }
            }
          }
            
$_POST['attribs'][$prid][$option] = $option_value;
          }
        } 

I placed this after "foreach($_POST['id'] as $option => $option_value) {" in the extra cart actions folder for this module.

Now, this works ok, but it checks every single attribute for an upload, not the upload field in itself, meaning I get a heap of messages saying 'file not uploaded' among 2 or 3 which I did actually upload.

Also, the value doesn't appear on the attributes list below any more either!

I can't work this out!