如何从给定的 Sharepoint 站点下载整个文件系统?

问题描述 投票:0回答:1

所以我有一个名为“ABC”的 shaprepoint 网站。下面是其中存储文件的文件结构:

|-Folder1
|  |--file_1_1.docx
|  |--file_1_2.docx
|
|-Folder2
|  |--file_2_1.docx
|
|-file_x.docx

现在我想将文件下载到我的本地计算机。我听说我可以使用“Office365-REST-Python-Client”库来做到这一点。我在互联网上浏览了不同的代码,但没有找到任何具体的解决方案。下面的代码为我提供了有关所有文件夹的信息,但不提供有关文件的信息。

client_id = "XXXXX"
client_secret = "YYYY"

site_url = "https://tenantName.sharepoint.com/sites/ABC"
relative_url = "Documents"

def connectAuth():
    # Initialize the client credentials
    client_credentials = ClientCredential(client_id, client_secret)

    # create client context object
    ctx = ClientContext(site_url).with_credentials(client_credentials)
    
    try:
        libraryRoot = ctx.web.get_folder_by_server_relative_path(relative_url)
        libraryRoot.expand(["Files","Folders"]).get().execute_query()

        folder = libraryRoot.folders
        print(folder)
        
        print("Number of folders:", len(folder))
        print("Folder names:")
        for folder_item in folder:
            ctx.load(folder_item)
            ctx.execute_query()
            print(folder_item.properties["Name"])
            
    except Exception:
        traceback.print_exc()
        print('Problem printing out library contents')
        #sys.exit(1)

connectAuth()

您能帮我下载这些文件夹中以及这些文件夹外的文件吗?我的意思是我希望将文件 file_1_1.docx、file_1_2.docx、file_2_1.docx 和 file_x.docx 下载到我的本地计算机。

python sharepoint office365
1个回答
0
投票

所以,我得到了答案,这不是一种有效的方法,但只是完成工作。

def downlaod_file_from_folder(folder_url, site_url, client_id, client_secret, local_file_path):
    client_credentials = ClientCredential(client_id, client_secret)
    ctx = ClientContext(site_url).with_credentials(client_credentials)
    try:
        folderName = ctx.web.get_folder_by_server_relative_path(folder_url)
        ctx.load(folderName)
        ctx.execute_query()
        files = folderName.files
        ctx.load(files)
        ctx.execute_query()
        for file_item in files:
            ctx.load(file_item)
            ctx.execute_query()
            fileName = file_item.properties["Name"]    
            file_url = file_item.properties["ServerRelativeUrl"]
            final_file_path = local_file_path + "//" + fileName
            with open(final_file_path, "wb") as local_file:
                file = ctx.web.get_file_by_server_relative_url(file_url)
                file.download(local_file)
                ctx.execute_query()
            print(f"File {fileName} downloaded successfully")
    except Exception as e:
        return {"Error": str(e)}

        
def downloadFiles(relative_url, site_url, client_id, client_secret, local_file_path):
    client_credentials = ClientCredential(client_id, client_secret)
    cctx = ClientContext(site_url).with_credentials(client_credentials)
    try:
        libraryRoot = cctx.web.get_folder_by_server_relative_path(relative_url)
        libraryRoot.expand(["Files","Folders"]).get().execute_query()
        folders = libraryRoot.folders
        files = libraryRoot.files
        if len(files) > 0:
            folder_url = relative_url
            downlaod_file_from_folder(folder_url, site_url, client_id, client_secret, local_file_path)    
        if len(folders) > 0:
            for folder_item in folders:
                cctx.load(folder_item)
                cctx.execute_query()
                if folder_item.properties["Name"] =="Forms":
                    pass
                else:
                    folder_url = relative_url + "/" + str(folder_item.properties["Name"])
                    downloadFiles(folder_url, site_url, client_id, client_secret, local_file_path)
        else: 
            pass
        return{"Success": "Files Downloaded Successfully"}
    except Exception as e:
        return {"error":str(e)}
© www.soinside.com 2019 - 2024. All rights reserved.