5
0

More than 1 year has passed since last update.

PowerAutomate 「ファイルの作成」は名前が長すぎるとエラー?

Last updated at Posted at 2022-07-27

概要

SharePointのライブラリにファイルを保存するアクションで、特定のファイルだけ保存が失敗する事象に遭遇しました。
結論的には、フォルダ名/ファイル名の長さが直接原因となりBad Requestの形でアクションが失敗します。

厳密には、ファイル保存後のid(識別子)が基準になっていそうで、およそ740バイト前後でエラーとなるようです。
もつろん、SharePointに手動で保存する場合は問題ありません。

image.png

症状

出力の内容
The request URL is invalid.

{
  "statusCode": 400,
  "headers": {
    "Connection": "close",
    "Date": "Wed, 27 Jul 2022 15:41:24 GMT",
    "Content-Length": "324",
    "Content-Type": "text/html; charset=us-ascii"
  },
  "body": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\"http://www.w3.org/TR/html4/strict.dtd\">\r\n<HTML><HEAD><TITLE>Bad Request</TITLE>\r\n<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html; charset=us-ascii\"></HEAD>\r\n<BODY><h2>Bad Request - Invalid URL</h2>\r\n<hr><p>HTTP Error 400. The request URL is invalid.</p>\r\n</BODY></HTML>\r\n"
}

SharePointリストに添付保存されたファイルを一つずつ読み出し、DocLibに保存するフローを組んでおり、
ファイルを保存する際に失敗する事象が発生。

問題のファイルはOutlookからエクスポートしたmsgファイル。
ファイル名はメールの件名になる。タイトルが長かったり、記号を含んでいたり、ファイル名が怪しかった。

ファイル名削ると保存に成功したが、idが異様に長いことに気づく。
image.png

例:

%252fShared%2bDocuments%252f%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%258201234567890123456789.msg

何でそんな長いの?

日本語のファイル名はURLエンコードされるため文字数が増えるためです。
なので英語圏ではまず発生しないので事例も見つかりません。

更に、Power Automateでは%自体をエンコードするため2回エンコードがかり、%→%25となり更に増えます。

//元ファイル名
あああ.msg・・・13バイト

//エンコード一回目・・・31バイト
%E3%81%82%E3%81%82%E3%81%82.msg

//エンコード二回目・・・49バイト
%25E3%2581%2582%25E3%2581%2582%25E3%2581%2582.msg

上記のように、全角1文字あたり15バイトの勢いで増えていきます。
740バイト付近が制限だとすると、ファイル名は約50文字くらいでエラーが発生します。

実際にはフォルダパスや拡張子もくっつくのでもう少し短くなります。

何バイトでエラーになるか

ファイルの作成

SharePointのライブラリにファイルを作成するアクションの場合です。
idが742バイトまで登録できることを確認しました。

ただ、ライブラリやフォルダによって730バイトくらいでエラーになる場合もあり、他にも何か影響してそうです。

検証としてPower Automateで1文字ずつ文字数を増やして保存。
image.png
ある時点でエラーが発生。
image.png
image.png

当然ですが、以下のようにフォルダパスが長いと何もファイルを保存できなくなります
image.png

ファイルコンテンツの取得

もしやファイルコンテンツを取得する際もエラーにならないかと思い検証。

1024バイトまで実行できることを確認しました。
こちらは意味ありげな数値ですね。
ファイルの作成よりも多くの文字数に対応しているようです。

image.png
image.png

既に事例がないか調べてみると、遭遇した方がいらっしゃいました。
Excelコネクタでも同様の問題があるようです。

追記

OneDrive/SharePointの公開されている制限で、「パスの長さ」の制限があるようです。
この制限は、URLのsites~のパスが対象になるようです。
あくまでデコード後で400なので今回の長さなら基準内なのですが、Power Automateから操作する場合にエンコード後のパス長さにも制限があり、例えば800バイト程度で制限があるのかもしれません。

SharePoint では、デコードされたファイル パス全体 (ファイル名を含む) の長さは 400 文字以内にする必要があります。 この制限は、デコード後のフォルダー パスとファイル名の組み合わせに適用されます。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0