Async Function UpdateAttachmentContent(siteUrl As String, username As String, password As String, listName As String, itemId As Integer, attachmentName As String, filePath As String) As Task
Dim credentials As String = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"))
Using client As New HttpClient()
client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Basic", credentials)
' 添付ファイルを削除
Dim deleteEndpointUrl As String = $"{siteUrl}/_api/web/lists/getbytitle('{listName}')/items({itemId})/AttachmentFiles/getByFileName('{attachmentName}')"
Dim deleteResponse As HttpResponseMessage = Await client.DeleteAsync(deleteEndpointUrl)
If Not deleteResponse.IsSuccessStatusCode Then
Console.WriteLine($"Failed to delete attachment '{attachmentName}'. StatusCode: {deleteResponse.StatusCode}")
Return
End If
' 新しい添付ファイルを追加
Dim fileContent As New StreamContent(File.OpenRead(filePath))
fileContent.Headers.ContentDisposition = New ContentDispositionHeaderValue("form-data") With {
.Name = "file",
.FileName = Path.GetFileName(filePath)
}
Dim multipartContent As New MultipartFormDataContent()
multipartContent.Add(fileContent)
Dim addEndpointUrl As String = $"{siteUrl}/_api/web/lists/getbytitle('{listName}')/items({itemId})/AttachmentFiles/add(FileName='{Path.GetFileName(filePath)}')"
Dim addResponse As HttpResponseMessage = Await client.PostAsync(addEndpointUrl, multipartContent)
If addResponse.IsSuccessStatusCode Then
Console.WriteLine($"Attachment '{attachmentName}' content updated successfully for item with ID {itemId}.")
Else
Console.WriteLine($"Failed to update attachment content. StatusCode: {addResponse.StatusCode}")