Question/Problem
SharePointのモダン環境における『ファイルをダウンロード』アクティビティ(UiPath.MicrosoftOffice365.Activities.File.DownloadFileConnection)を使用して、大容量のファイル(例:1.6GBを超えるもの)をダウンロードしようとすると、エラーが発生してしまいます。この問題に対する対処方法をご教示いただけますでしょうか。
Error
大容量ファイルをダウンロードする際に、タイムアウトが発生します。
エラーメッセージ例:
IResource型ファイルをフォルダに格納: ファイルの取得中にエラーが発生しました。ファイル XXX.zip が初めて使用された アクティビティを修正してください。 The request was canceled due to the configured HttpClient. Timeout of 300 seconds elasing.
また、2GB を超えるファイルをダウンロードしますと、以下のエラーが発生します。
エラーメッセージ例:
IResource型ファイルをフォルダに格納: ファイルの取得中にエラーが発生しました。ファイル YYY.zip が初めて使用された アクティビティを修正してください。 Code: generalException
`Microsoft.Graph.ServiceException: Code: generalException Message: An error occurred sending the request. —> System.Net.Http.HttpRequestException: Cannot write more bytes to the buffer than the configured maximum buffer size: 2147483647. at System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) (以下省略)
Answer
原因
大容量ファイルのダウンロード処理に長時間を要することにより、タイムアウトが発生してしまう可能性がございます。
また、技術的な制限として、HttpClientには、レスポンスの最大長がlong型の最大値である2,147,483,647バイト(約2GB)という制約がございます。
HTTP通信や使用しているAPIの仕様により、2GBを超えるファイルのダウンロード時にリクエストが失敗することがあります。
参考:
HttpClient.MaxResponseContentBufferSize プロパティ (System.Net.Http) | Microsoft Learn
解決策
大容量ファイルは以下のような手順にてブラウザから直接ダウンロードすることで回避可能。
【手順】
1.繰り返し(ファイル/フォルダー)(UiPath.MicrosoftOffice365.Activities.Files.ForEachFileFolder)にて、
以下の様に設定し、ダウンロードしたいファイルを検索し、情報を取得します。
【設定内容】
繰り返し(コレクションの各要素):任意のDriveItem型の変数 ※ここではDriveItemとします
クラウド上の場所:ダウンロードしたいファイルの格納されているフォルダ
追加フィルター:条件に「ファイル名」、「次を含む」、「ファイル名称」を指定
※検索フォルダ内の特定のファイルを指定したい場合のみ
2.「アプリケーションブラウザを使用」アクティビティを配置し、以下の様に設定します。
【設定内容】
ブラウザーのURL:DriveItem.WebURL
3.「実行」の中に「文字を入力」アクティビティを配置し、以下の様に設定します。
【設定内容】
以下を入力:ダウンロード先のパス
4.「ダウンロードを待機」アクティビティを配置し、以下の様に設定します。
【設定内容】
監視対象のフォルダー:ダウンロード先のパス
※もしも実行時にタイムアウトするようであれば、プロパティのタイムアウトの値を延長ください。
5.「ダウンロードを待機」アクティビティ内の「実行」の中に
「クリック」アクティビティを配置し、以下の様に設定します。
【設定内容】
クリック箇所:ダウンロードダイアログの「保存」ボタン
※Chrome(ブラウザ)のダウンロードオプションの「ダウンロード前に各ファイルの保存場所を確認する」が有効になっていない場合は、
手順2以降が以下の手順となり、ダウンロード後にローカル間でファイルを移動させるようにする
-
「ダウンロードを待機」アクティビティを配置し、以下の様に設定します
【設定内容】
監視対象のフォルダー:ダウンロード先のパス
※もしも実行時にタイムアウトするようであれば、プロパティのタイムアウトの値を延長ください。 -
「ダウンロードを待機」アクティビティ内の「実行」の中に、
「アプリケーションブラウザを使用」アクティビティを配置し、以下の様に設定します
【設定内容】
ブラウザーのURL:DriveItem.WebURL -
「ファイルを移動」アクティビティを配置し、以下の様に設定します
【設定内容】
移動元:ブラウザからダウンロードされたフォルダのパス
移動先:移動させたい場所のパス