Public/New-DokuAttachment.ps1
function New-DokuAttachment { <# .SYNOPSIS Uploads a file as an attachment .DESCRIPTION Uploads a file as an attachment .PARAMETER FullName The FullName of the to-be-uploaded file, including namespace(s). Defaults to the root namespace .PARAMETER Path The file path of the attachment to upload .PARAMETER Force Force upload of attachment, overwriting any existing files with the same name .EXAMPLE PS C:\> New-DokuAttachment -FullName 'value2' -FilePath 'value3' .OUTPUTS System.Management.Automation.PSObject .NOTES AndyDLP - 2018-05-26 #> [CmdletBinding(PositionalBinding = $true, SupportsShouldProcess=$True, ConfirmImpact='Medium')] [OutputType([psobject])] param ( [Parameter(Mandatory = $true, Position = 1, HelpMessage = 'The file path of the attachment to upload')] [ValidateScript({ Test-Path -Path $_ -PathType Leaf })] [string]$Path, [Parameter(Mandatory = $true, Position = 2, HelpMessage = 'The FullName of the to-be-uploaded file, including namespace(s)')] [ValidateNotNullOrEmpty()] [string]$FullName, [Parameter(Mandatory = $false, Position = 3, HelpMessage = 'Force upload of attachment, overwriting any existing files with the same name')] [switch]$Force, [Parameter(Mandatory = $false, Position = 4, HelpMessage = 'Pass the newly created attachment object out')] [switch]$PassThru ) if ($PSCmdlet.ShouldProcess("Upload attachment at path: $Path to location: $Fullname")) { # add a check size before uploading?? Write-Verbose "Reading all bytes from file: $Path" $FileBytes = [IO.File]::ReadAllBytes($Path) # Moved conversion to Base64 to inside the function0. $APIResponse = Invoke-DokuApiCall -MethodName 'wiki.putAttachment' -MethodParameters @($FullName,$FileBytes,@{'ow' = [bool]$Force}) if ($APIResponse.CompletedSuccessfully -eq $true) { Write-Verbose $APIResponse.XMLPayloadResponse $FileItem = (Get-Item -Path $Path) $ResultString = [string]($APIResponse.XMLPayloadResponse | Select-Xml -XPath "//value/string").node.InnerText if ($ResultString -eq $FullName) { Write-Verbose "File uploaded successfully" if ($PassThru) { $attachmentObject = New-Object PSObject -Property @{ FullName = $FullName SourceFilePath = $Path Size = $FileItem.Length SourceFileLastModified = $FileItem.LastWriteTimeUtc FileName = ($FullName -split ":")[-1] ParentNamespace = ($FullName -split ":")[-2] RootNamespace = ($FullName -split ":")[0] } $attachmentObject } } else { Write-Error "Error: $ResultString - Fullname: $FullName" } } elseif ($null -eq $APIResponse.ExceptionMessage) { Write-Error "Fault code: $($APIResponse.FaultCode) - Fault string: $($APIResponse.FaultString)" } else { Write-Error "Exception: $($APIResponse.ExceptionMessage)" } } # should process } |