Procházet zdrojové kódy

HUE-3106 [filebrowser] Add support for full paths in zip file uploads

Directory sturucture in the archive is maintained inside the folder where zip file was uploaded.
krish před 10 roky
rodič
revize
7c86a75

+ 6 - 0
apps/filebrowser/src/filebrowser/lib/archives.py

@@ -97,6 +97,12 @@ class ZipArchive(Archive):
         dirs.append(name)
       else:
         files.append(name)
+        # self.zfh.namelist() sometimes doesn't return all the directories
+        # Go up the path one directory at the time
+        parent = os.path.dirname(name)
+        while parent != '' and parent not in dirs:
+          dirs.append(parent)
+          parent = os.path.dirname(parent)
     return (dirs, files)
 
   def _create_files(self, basepath, files=[]):

+ 10 - 0
apps/filebrowser/src/filebrowser/lib/archives_test.py

@@ -35,6 +35,16 @@ class ArchiveTest(unittest.TestCase):
     assert_true(os.path.isfile(directory + '/test.txt'))
     assert_equal(os.path.getsize(directory + '/test.txt'), 4)
 
+    FILE = os.path.realpath('apps/filebrowser/src/filebrowser/test_data/test5.zip')
+
+    # Extract the file
+    # This file should only have 'test.txt' in it
+    directory = archives.archive_factory(FILE, 'zip').extract()
+    assert_true(os.path.exists(directory))
+    assert_true(os.path.isdir(directory))
+    assert_true(os.path.isfile(directory + '/tmp/temp/test.txt'))
+    assert_equal(os.path.getsize(directory + '/tmp/temp/test.txt'), 5)
+
   def test_tgz(self):
     FILE = os.path.realpath('apps/filebrowser/src/filebrowser/test_data/test.tar.gz')
 

binární
apps/filebrowser/src/filebrowser/test_data/test5.zip