`LargeFileUploadTask.upload()` throws a 400 error when file size is smaller than max_chunk_size
まだ誰も着手していません。
評価
調査の方向性
LargeFileUploadTask.upload() から始め、max_chunk_size より小さいファイル(10 MB のチャンクサイズに対する 5 KB のファイルなど)を使って報告されたケースを再現します。アップロード結果と、その後の 400 レスポンスを追跡します。小さいファイルのアップロードが予期しないエラーなしに完了するか、意味のあるエラーを報告すれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Describe the bug
While uploading a large file using LargeFileUploadTask to a SharePoint drive location, if the overall file size is less than the max_chunk_size defined (e.g uploading a 5 KB file but the chunk size is 10 MB), the async LargeFileUploadTask.upload() method uploads the file but throws below error:
APIError:
APIError
Code: 400
message: The server returned an unexpected status code and no error class is registered for this code 400
Expected behavior
The upload task should complete without any errors OR the error message should be meaningful e.g. File is too small.
How to reproduce
destination_path = "path/to/your_file.txt" # path on SharePoint drive where I want to upload the file
file_path = "path/to/your_file.txt" # A small file like 10 KB in my local system
async def upload_large_file(graph_client, drive_id):
try:
file = open(file_path, 'rb')
uploadable_properties = DriveItemUploadableProperties(
additional_data={'@microsoft.graph.conflictBehavior': 'replace'}
)
upload_session_request_body = CreateUploadSessionPostRequestBody(item=uploadable_properties)
print(f"Uploadable Properties: {uploadable_properties.additional_data}")
# can be used for normal drive uploads
try:
upload_session = await graph_client.drives.by_drive_id(
drive_id
).items.by_drive_item_id("root:/my_docs/test_upload.txt:"
).create_upload_session.post(upload_session_request_body)
except APIError as ex:
print(f"Error creating upload session: {ex}")
# to be used for large file uploads
large_file_upload_session = LargeFileUploadSession(
upload_url=upload_session.upload_url,
expiration_date_time=datetime.now() + timedelta(days=1),
additional_data=upload_session.additional_data,
is_cancelled=False,
next_expected_ranges=upload_session.next_expected_ranges
)
max_chunk_size = 10 * 1024 * 1024
task = LargeFileUploadTask(
upload_session=large_file_upload_session,
request_adapter=graph_client.request_adapter,
stream=file,
parsable_factory=DriveItem,
max_chunk_size=max_chunk_size
)
total_length = os.path.getsize(file_path)
# Upload the file
# The callback
def progress_callback(uploaded_byte_range: tuple[int, int]):
print(f"Uploaded {uploaded_byte_range[0]} bytes of {total_length} bytes\n\n")
try:
upload_result = await task.upload(progress_callback)
print(f"Upload complete {upload_result}")
except APIError as ex:
print(f"Error uploading: {ex.message} - {ex.response_status_code}")
raise
except APIError as e:
print(f"Error: {e}")
raise
asyncio.run(upload_large_file(graph_client, drive_id))
SDK Version
1.1.7
Latest version known to work for scenario above?
No response
Known Workarounds
Changing the max_chunk_size value to (file_size - 1) seems to prevent the error from occurring.
Debug output
Click to expand log
```</details>
### Configuration
OS: Windows 10
Architecture: x64
Python version: 3.9.19
### Other information
_No response_
- 主要言語
- Python
- スター
- 288
- フォーク
- 52
- 平均マージ
- 8時間 10分
- マージ済み PR(30日)
- 1
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
microsoftgraph/msgraph-sdk-python-core のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
-
status:waiting-for-triage type:bug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
status:waiting-for-triage type:bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
microsoftgraph/msgraph-sdk-python-core#1030 · コメント 2 件 · リアクション 4 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 76/100
-
status:waiting-for-triage type:feature
難易度 3/5 1〜2日 初心者へのやさしさ 52/100
microsoftgraph/msgraph-sdk-python-core の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 90/100
learningequality/ricecooker#747 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
BSData/horus-heresy-3rd-edition#3171 ·
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
run-llama/llama_index#23199 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
KhronosGroup/glTF-Blender-IO#2769 ·