diff --git src/bp-core/bp-core-functions.php src/bp-core/bp-core-functions.php
index 227237b..072a98d 100644
--- src/bp-core/bp-core-functions.php
+++ src/bp-core/bp-core-functions.php
@@ -2597,11 +2597,32 @@ function bp_upload_dir() {
 	$bp = buddypress();
 
 	if ( empty( $bp->upload_dir ) ) {
-		$need_switch = (bool) ( is_multisite() && ! bp_is_root_blog() );
+		$current_site_id = 0;
+
+		if ( isset( $GLOBALS['current_site']->blog_id ) ) {
+			$current_site_id = (int) $GLOBALS['current_site']->blog_id;
+			$need_switch     = (int) bp_get_root_blog_id() !== $current_site_id;
+		} else {
+			$need_switch = (bool) ( is_multisite() && ! bp_is_root_blog() );
+		}
 
 		// Maybe juggle to root blog.
 		if ( true === $need_switch ) {
-			switch_to_blog( bp_get_root_blog_id() );
+			$blog_id = bp_get_root_blog_id();
+
+			/**
+			 * Using this filter, Multiblog setups can use a common uploads dir.
+			 *
+			 * @since  2.6.0
+			 *
+			 * @param $value False to use separate uploads dir for each site.
+			 *               True to use a common uploads dir accross the network.
+			 */
+			if ( true === (bool) apply_filters( 'bp_multiblog_common_upload_dir', false ) && ! empty( $current_site_id ) && bp_is_multiblog_mode() ) {
+				$blog_id = $current_site_id;
+			}
+
+			switch_to_blog( $blog_id );
 		}
 
 		// Get the upload directory (maybe for root blog).
