水. 11月 30th, 2022

概要

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

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

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

インストール方法

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()

動作確認