タグ: Office365-REST-Python-Client

  • Office365-REST-Python-Clientを使用したSharePointへの1GBファイルのアップロード方法

    概要

    sharepoint に 大容量(1G)のファイルをアップロードする方法を紹介

     

    CURL コマンドでやると、以下の記事で紹介のあるように認証周りに骨が折れる。

    https://rougeref.hatenablog.com/entry/2020/04/15/000000

    そこで、認証周りを包括しつつ非常に簡単にアップロードできるライブラリを紹介。

    インストール方法

    pip install Office365-REST-Python-Client

     

    サンプルコード

    以下のコードはサンプルとしてユーザー認証をしている。

    アプリケーションを登録して利用することが望ましい。

    sharepoint_url と、UserCredential の部分を適宜修正することでそのまま利用可能。

    from office365.runtime.auth.user_credential import UserCredential
    from office365.sharepoint.client_context import ClientContext
    from office365.sharepoint.files.creation_information import FileCreationInformation
    import os
    
    def get_sharepoint_context_using_user():
    
    sharepoint_url = 'https://xxxxxxxxxx.sharepoint.com/sites/upload-test'
    user_credentials = UserCredential('xxxxxxxxxx@sumito.jp', 'password')
    ctx = ClientContext(sharepoint_url).with_credentials(user_credentials)
    return ctx
    
    def create_sharepoint_directory(dir_name: str):
    """
    Creates a folder in the sharepoint directory.
    """
    if dir_name:
    
    ctx = get_sharepoint_context_using_user()
    
    result = ctx.web.folders.add(f'Shared Documents/{dir_name}').execute_query()
    
    if result:
    # documents is titled as Shared Documents for relative URL in SP
    relative_url = f'Shared Documents/{dir_name}'
    return relative_url
    
    
    target_url = "/sites/upload-test/Shared Documents/test-tsukada-dir-hoge"
    ctx = get_sharepoint_context_using_user()
    target_folder = ctx.web.get_folder_by_server_relative_url(target_url)
    size_chunk = 1000000
    local_path = "1G.csv"
    
    def print_upload_progress(offset):
    file_size = os.path.getsize(local_path)
    print("Uploaded '{0}' bytes from '{1}'...[{2}%]".format(offset, file_size, round(offset / file_size * 100, 2)))
    
    create_sharepoint_directory('test-tsukada-dir-hoge')
    
    with open(local_path, 'rb') as f:
    uploaded_file = target_folder.files.create_upload_session(f, size_chunk,print_upload_progress).execute_query()

     

    動作確認