今回は、ユーザーの写真を登録してみます。
ユーザーの写真登録は、ファイル アップロードを行うことで実現できます。
LINE WORKS API を利用したファイルのアップロードは、一度、ファイルアップロードのための URL を取得する API を呼び出し、取得した URL に対して改めてファイルを POST することで行います。
ファイルのアップロード URL へのファイルの POST は、その他の API を呼び出す場合とは Header 情報が異なるので、LINE WORKS API 2.0 を PowerShell で叩いてみる (その1 : JWT の処理) で作った $Header ををのまま利用することができません。
LINE WORKS API 2.0 を PowerShell で叩いてみる (その1 : JWT の処理)で Token を取得した際に Token を SecureString として取っておき、のちほど、この Token を使ってファイル アップロードを行うことにします。
# ここまで省略
$url = 'https://auth.worksmobile.com/oauth2/v2.0/token'
$response = Invoke-RestMethod -Uri $url -Method POST -Headers $requestHeader -Body $requestBody
# 追加 : Token を SecureString として残しておく
$secToken = $response.access_token | ConvertTo-SecureString -AsPlainText -Force
まずは、ファイルのアップロード先 URL を取得します。
userId
も、nextCursor
と同様、URL エンコードが必要ですのでご注意ください
$filePath = 'C:\tmp\photo.jpg'
$file= get-item $filePath
$userId = 'user@yourcompany'
# userId は Path Parameter のため、URL Encode が必要
$urlEncodedUserId = [System.Web.HttpUtility]::UrlEncode($userId)
$getUploadUrlAPI = "https://www.worksapis.com/v1.0/users/$urlEncodedUserId/photo"
$body = @{
fileName = $file.Name
fileSize = $file.Length
}
$Response = Invoke-RestMethod -Method POST -Uri $getUploadUrlAPI -Headers $Header -body (ConvertTo-Json $body)
$uploadURL = $Response.UploadUrl
この $uploadURL
に、multipart/form-data
形式でコンテンツを POST します。
$ContenType = 'image/jpeg'
$boundary = [System.Guid]::NewGuid().ToString()
$fileBinary = [IO.File]::ReadAllBytes($filePath)
$enc = [System.Text.Encoding]::GetEncoding("iso-8859-1")
$fileContent = $enc.GetString($fileBinary)
$LF = "`r`n"
$fileNameBytes = $enc.GetString([System.Text.Encoding]::UTF8.GetBytes($file.Name))
$requestBody = (
"--$boundary",
"Content-Disposition: form-data; name=`"resourceName`"; filename=`"$($fileNameBytes)`"",
"Content-Type: $ContenType$LF",
$fileContent,
"--$boundary--$LF"
) -join $LF
# ここでは、Header 情報を事前に作成せずに Invoke-RestMethod を呼び出している
# ConentType と認証情報は、個別に引数として指定
Invoke-RestMethod -Uri $uploadURL -Method POST -body $requestBody -Authentication Bearer -Token $secToken -ContentType "multipart/form-data; boundary=$boundary; charset=iso-8859-1"
これで、ユーザーの写真が登録できました。