Level up your Box knowledge with brand new learning paths on Box University. Visit training.box.com to get started

Want to Download contents of a folder

New post

Comments

1 comment

  • Rui Barbosa

    Hi Deepak,

    You have 2 options:

    Download the folder as a zip file:

    from boxsdk import JWTAuth, Client
    def main():
    auth = JWTAuth.from_settings_file('.jwt.config.json')
    auth.authenticate_instance()
    client = Client(auth)
    folder_id = '163422716106'
    user = client.user().get()
    print(f"User: {user.id}:{user.name}")
    folder = client.folder(folder_id).get()
    print(f"Shared Folder: {folder.id}:{folder.name}")
    print("#" * 80)
    print("Type\tID\t\tName")
    items = folder.get_items()

    download_items=[]
    for item in items:
    print(f"{item.type}\t{item.id}\t{item.name}")
    download_items.append(item)

    print("#" * 80)

    with open(folder.name+'.zip', "wb") as download_file:
    status = client.download_zip(folder.name, download_items, download_file)

    print(f"Download status: {status}")

    if __name__ == "__main__":
    main()
    print("Done")

    Resulting in:

    User: 20344589936:UI-Elements-Sample
    Shared Folder: 163422716106:Box UI Elements Demo
    ################################################################################
    Type    ID              Name
    folder  168248338385    test
    folder  163436720758    Uploads
    file    960391244732    Box-unsplash.jpg
    file    1031018607151   test.txt
    ################################################################################
    Download status: {'total_file_count': 19, 'downloaded_file_count': 19, 'skipped_file_count': 0,
    'skipped_folder_count': 0, 'state': 'succeeded', ...}
    Done
    (file in folder 15M Feb  3 10:21 Box UI Elements Demo.zip)

    The other option is to recursively download each item one by one:

    import os
    from boxsdk import JWTAuth, Client

    def main():
    auth = JWTAuth.from_settings_file('.jwt.config.json')
    auth.authenticate_instance()
    client = Client(auth)
    folder_id = '163422716106'
    user = client.user().get()
    print(f"User: {user.id}:{user.name}")
    folder = client.folder(folder_id).get()
    print(f"Downloadin folder: {folder.id}:{folder.name}")
    print("#" * 80)
    print("Type\tID\t\tName")
    os.chdir('downloads')

    items = folder.get_items()
    download_items(items)
    os.chdir('..')

    def download_items(items):
    for item in items:
    if item.type == 'folder':
    os.mkdir(item.name)
    os.chdir(item.name)
    download_items(item.get_items())
    os.chdir('..')
    if item.type == 'file':
    print(f"{item.type}\t{item.id}\t{item.name}",end='')
    with open(item.name,'wb') as download_file:
    item.download_to(download_file)
    print("\tdone")

    if __name__ == "__main__":
    main()
    print("Done")

     Resulting in:

    User: 20344589936:UI-Elements-Sample
    Downloadin folder: 163422716106:Box UI Elements Demo
    ################################################################################
    Type    ID              Name
    file    992001466707    7091F798-2502-40A9-B2A2-0561FC3FA84B.jpeg       done
    file    992008414626    A4794839-9F81-43BE-B3EE-B7D3BF07E8E5.webp       done
    file    962025972260    Audio.mp3       done
    file    960488030766    AWS Prime - Pre-Requisites.pdf  done
    file    960483183051    AWS Prime Workshop.pdf  done
    ...
    Done

    Hope this helps.

     

     

    0
    Comment actions Permalink

Please sign in to leave a comment.