diff -Naur a/vendor/magento/framework/File/Uploader.php b/vendor/magento/framework/File/Uploader.php
--- a/vendor/magento/framework/File/Uploader.php
+++ b/vendor/magento/framework/File/Uploader.php
@@ -6,7 +6,10 @@
 namespace Magento\Framework\File;

 use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\App\ObjectManager;
 use Magento\Framework\Exception\FileSystemException;
+use Magento\Framework\Filesystem\DriverInterface;
+use Magento\Framework\Filesystem\DriverPool;
 use Magento\Framework\Validation\ValidationException;

 /**
@@ -144,15 +147,13 @@ class Uploader

     /**
      * Maximum Image Width resolution in pixels. For image resizing on client side
-     * @deprecated
-     * @see \Magento\Framework\Image\Adapter\UploadConfigInterface::getMaxWidth()
+     * @deprecated @see \Magento\Framework\Image\Adapter\UploadConfigInterface::getMaxWidth()
      */
     const MAX_IMAGE_WIDTH = 1920;

     /**
      * Maximum Image Height resolution in pixels. For image resizing on client side
-     * @deprecated
-     * @see \Magento\Framework\Image\Adapter\UploadConfigInterface::getMaxHeight()
+     * @deprecated @see \Magento\Framework\Image\Adapter\UploadConfigInterface::getMaxHeight()
      */
     const MAX_IMAGE_HEIGHT = 1200;

@@ -169,21 +170,32 @@ class Uploader
      */
     private $directoryList;

+    /**
+     * @var DriverPool|null
+     */
+    private $driverPool;
+
+    /**
+     * @var DriverInterface|null
+     */
+    private $fileDriver;
+
     /**
      * Init upload
      *
      * @param string|array $fileId
      * @param \Magento\Framework\File\Mime|null $fileMime
      * @param DirectoryList|null $directoryList
+     * @param DriverPool|null $driverPool
      * @throws \DomainException
      */
     public function __construct(
         $fileId,
         Mime $fileMime = null,
-        DirectoryList $directoryList = null
+        DirectoryList $directoryList = null,
+        DriverPool $driverPool = null
     ) {
-        $this->directoryList= $directoryList ?: \Magento\Framework\App\ObjectManager::getInstance()
-            ->get(DirectoryList::class);
+        $this->directoryList= $directoryList ?: ObjectManager::getInstance()->get(DirectoryList::class);

         $this->_setUploadFileId($fileId);
         if (!file_exists($this->_file['tmp_name'])) {
@@ -192,7 +204,8 @@ class Uploader
         } else {
             $this->_fileExists = true;
         }
-        $this->fileMime = $fileMime ?: \Magento\Framework\App\ObjectManager::getInstance()->get(Mime::class);
+        $this->fileMime = $fileMime ?: ObjectManager::getInstance()->get(Mime::class);
+        $this->driverPool = $driverPool;
     }

     /**
@@ -230,7 +243,7 @@ class Uploader
             $this->setAllowCreateFolders(true);
             $this->_dispretionPath = static::getDispersionPath($fileName);
             $destinationFile .= $this->_dispretionPath;
-            $this->_createDestinationFolder($destinationFile);
+            $this->createDestinationFolder($destinationFile);
         }

         if ($this->_allowRenameFiles) {
@@ -275,13 +288,11 @@ class Uploader
      * @return void
      * @throws FileSystemException
      */
-    private function validateDestination($destinationFolder)
+    private function validateDestination(string $destinationFolder): void
     {
         if ($this->_allowCreateFolders) {
-            $this->_createDestinationFolder($destinationFolder);
-        }
-
-        if (!is_writable($destinationFolder)) {
+            $this->createDestinationFolder($destinationFolder);
+        } elseif (!$this->getFileDriver()->isWritable($destinationFolder)) {
             throw new FileSystemException(__('Destination folder is not writable or does not exists.'));
         }
     }
@@ -655,7 +666,7 @@ class Uploader
      * @return \Magento\Framework\File\Uploader
      * @throws FileSystemException
      */
-    private function _createDestinationFolder($destinationFolder)
+    private function createDestinationFolder(string $destinationFolder)
     {
         if (!$destinationFolder) {
             return $this;
@@ -665,11 +676,13 @@ class Uploader
             $destinationFolder = substr($destinationFolder, 0, -1);
         }

-        if (!(@is_dir($destinationFolder)
-            || @mkdir($destinationFolder, 0777, true)
-        )) {
-            throw new FileSystemException(__('Unable to create directory %1.', $destinationFolder));
+        if (!$this->getFileDriver()->isDirectory($destinationFolder)) {
+            $result = $this->getFileDriver()->createDirectory($destinationFolder);
+            if (!$result) {
+                throw new FileSystemException(__('Unable to create directory %1.', $destinationFolder));
+            }
         }
+
         return $this;
     }

@@ -732,4 +745,20 @@ class Uploader
         }
         return $dispersionPath;
     }
+
+    /**
+     * Get driver for file
+     *
+     * @deprecated
+     * @return DriverInterface
+     */
+    private function getFileDriver(): DriverInterface
+    {
+        if (!$this->fileDriver) {
+            $this->driverPool = $this->driverPool ?: ObjectManager::getInstance()->get(DriverPool::class);
+            $this->fileDriver = $this->driverPool->getDriver(DriverPool::FILE);
+        }
+
+        return $this->fileDriver;
+    }
 }
