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

 

動作確認